-----BEGIN PGP SIGNED MESSAGE-----

  HP48 Frequently Asked Questions List (FAQ)
  Andre Schoorl <aschoorl@engr.uvic.ca>
  v4.24, 8 September 1996

  ----------------------------------------------------------------------------
  Answers to Frequently Asked Questions about HP48 calculators
  ----------------------------------------------------------------------------

  1. Introduction

     * 1.1 Overview
     * 1.2 This FAQ in Other Formats

  2. Miscellaneous Questions

     * 2.1 I'm a novice, and I have some questions. Where should I start?
     * 2.2 What Usenet Newsgroups are there for the HP48?
     * 2.3 What are some good FTP sites for the HP48?
     * 2.4 Are there any good WWW links for HP48 stuff?
     * 2.5 Is there an HP48 IRC Channel?
     * 2.6 How can I search for a specific HP48 file?
     * 2.7 What are good places to buy HP48's and accessories?
     * 2.8 Are there any CD-ROMs with HP48 software?
     * 2.9 Is there an HP48 Emulator?
     * 2.10 Is the HP48 Allowed on SATs, AP, or ACT Tests? (U.S.)
     * 2.11 When is the next HP coming out? Should I wait?
     * 2.12 How does the HP48 compare with other calculators?
     * 2.13 What is the Universal Font Library (UFL)?

  3. Questions about ROM versions

     * 3.1 What does the SX/GX have that the S/G doesn't?
     * 3.2 What is the difference between the HP48 G/GX and the HP48 S/SX?
     * 3.3 How can I tell what ROM revision I have?
     * 3.4 What bugs exist in the various versions of the HP48?
     * 3.5 What is new with the revision "J" ROM? (S/SX)
     * 3.6 What happened to ROM revisions G, H, I, O, and Q?
     * 3.7 Can I upgrade my HP48 S/SX?
     * 3.8 Can I upgrade my buggy GX to the latest ROM revision?
     * 3.9 What's the latest ROM version?
     * 3.10 Why would I buy a S/SX rather than a G/GX?

  4. Questions about the Operating System and Using the HP

     * 4.1 I typed RULES on my G/GX and got a crossword puzzle!
     * 4.2 Why does my HP48 occasionally "freeze" for a moment?
     * 4.3 What do I do if my HP48 locks up?
     * 4.4 My HP48 seems to take longer to turn on and off.
     * 4.5 What are all the different ON-KEY combinations?
     * 4.6 What are the different interactive self-tests?
     * 4.7 I can't account for some of the RAM in the HP48!
     * 4.8 What are the best methods for installing and removing libraries?
     * 4.9 How can I attach large libraries?
     * 4.10 Why does (1/3)*3 equal 0.999999999999?
     * 4.11 Why does my HP say that 0 to the power of 0 equals 1?
     * 4.12 Is there an Alternative to Calculating in RPN?
     * 4.13 Why do I get unexpected values when I add temperatures?
     * 4.14 How can I add my own units? What's the 1_? unit for?
     * 4.15 I want `pi' to be a numeric value, not a symbol.
     * 4.16 What are those little numbers near the top of my screen?
     * 4.17 What tricks are there for manipulating matrices?
     * 4.18 Can I use my HP48 as a remote control?
     * 4.19 Can the HP48 be used as a DTMF phone dialer?
     * 4.20 How can I run a program on warmstarts and/or power-up?
     * 4.21 I could speed up my HP-28S. How can I speed up my HP48?
     * 4.22 Can I make my HP graph any faster?
     * 4.23 What is the hidden directory and how do I access it?
     * 4.24 How can I recall one object from a memory archive?
     * 4.25 How do I take the logarithm of a base other than 10 or e?
     * 4.26 Are there any key combinations that aren't in the manual?
     * 4.27 How do I find out about commands not in the GX manual?
     * 4.28 How can one delete (or purge) an entire directory?

  5. Questions about cards, data transfers, batteries, and hardware

     * 5.1 Can I upgrade my S or G to more than 32K ram?
     * 5.2 How can I get/build a cable for my HP48?
     * 5.3 Why doesn't the I/R port work farther than a few inches?
     * 5.4 Can my HP48 talk to my HP100LX via Infrared?
     * 5.5 Can I print to a LaserJet printer with an HP48?
     * 5.6 I downloaded a program but all I get is "HPHP48-..."!
     * 5.7 What is the structure of HP48 ASCII headers?
     * 5.8 Why do Kermit transfers seem to get slower?
     * 5.9 Why does XRECV not work sometimes? (GX)
     * 5.10 What do the funny symbols in this document mean?
     * 5.11 What are the pinouts for the HP48 serial connector?
     * 5.12 Is there any information on interfacing to the HP48?
     * 5.13 How can I transfer programs/data from my HP-28S to my HP48?
     * 5.14 Can I use rechargeable batteries with the HP48?
     * 5.15 How can I tell, from within a program, if the battery is low?
     * 5.16 I lost the information on my RAM Card when I changed the battery!
     * 5.17 Why do I get an "Invalid card data" error when I merge a RAM card?
     * 5.18 I've heard about other manufacturer's RAM cards. Will they work?
     * 5.19 How does RAM card locking work?
     * 5.20 Why does the HP48 SX display flicker slightly?
     * 5.21 I broke the LCD screen is there an easy way to get another?
     * 5.22 How can I protect my LCD?
     * 5.23 Can I use my Amateur Radio with my HP48?

  6. Questions about programs

     * 6.1 Where can I get programs and information for the HP48 SX?
     * 6.2 What are the Goodies Disks and where do I get them?
     * 6.3 How do I get access to the HP Calculator BBS?
     * 6.4 What are files that end with ".zip", ".Z" or ".gz"?
     * 6.5 What is a "ship" file?
     * 6.6 What is the ASC format and how can I use it?
     * 6.7 What is the HYDE library, and how do I get rid of it?
     * 6.8 What is the Minehunt game, and how do I use it?

  7. Questions about programming and advanced user functions

     * 7.1 I've heard the names RPL, Saturn, STAR, GL etc... What are they?
     * 7.2 Is there a C compiler for the HP48?
     * 7.3 Why do SysRPL programs run faster than UserRPL programs?
     * 7.4 What is a good reference for learning SysRPL and ML?
     * 7.5 Can I make my own Libraries? Can I Split Others?
     * 7.6 How do I know what library ID number to use for my program?
     * 7.7 What information is there on the internals of the HP48?
     * 7.8 Where can I get some programming development tools?
     * 7.9 I know UserRPL. How do I get started in SysRPL?
     * 7.10 Are there any viruses for the HP48?
     * 7.11 How do I store fields of variable length effectively?
     * 7.12 What is "Vectored Enter", and how do I use it?
     * 7.13 What is "WSLOG"?
     * 7.14 What are SYSEVALs?
     * 7.15 What are some useful SYSEVALs?
     * 7.16 What are LIBEVALs?
     * 7.17 What are some useful LIBEVALs? (GX)
     * 7.18 What is the format of a GROB object?
     * 7.19 What is the AUR and what information does it contain?
     * 7.20 What is the syntax for INFORM, CHOOSE, and MSGBOX? (GX)
     * 7.21 How do I put checkfields in my INFORM menus?

  8. Appendix A: Various Useful Functions

     * 8.1 ASC Functions
     * 8.2 OBJFIX
     * 8.3 FIXIT
     * 8.4 LASTX
     * 8.5 Compact Data Storage

  9. Appendix B: GX Specific Information

     * 9.1 What's new in the HP48 G/GX?
     * 9.2 Examples of INFORM, CHOOSE, and MSGBOX
     * 9.3 Some useful LIBEVALs

  10. Appendix C: Details of Bugs

     * 10.1 The EquationWriter Bug
     * 10.2 Rotation Rate to Angular Frequency Conversion Bug

  11. Appendix D: Hardware Additions

     * 11.1 How to Make a Serial Cable
     * 11.2 Using Non-HP RAM Cards

  12. Appendix E: Where to get HP48 Programs

     * 12.1 Best Programs and Where to Get Them List
     * 12.2 Other FTP Sites
     * 12.3 FTP by Electronic Mail
     * 12.4 Bulletin Boards with HP48 Programs
     * 12.5 HP Goodies Disks

  13. Contributors

  ----------------------------------------------------------------------------

  1.  Introduction

  This FAQ is maintained by Andre Schoorl <aschoorl@engr.uvic.ca>

  It was previously maintained by Keith Maddock, and was originally
  compiled by Darryl Okahata.  Many thanks to both for their time and
  contributions!

  I rely on your input in order to keep this FAQ up to date.  If you
  have any suggestions or updates, feel free to mail them to me.

  1.1.  Overview

  The purpose of this FAQ is to provide answers to commonly asked
  questions about the Hewlett Packard HP48 family of scientific
  calculators.  This list contains information which has not necessarily
  been verified, and is not guaranteed to be correct.  It has been
  compiled from various postings in the newsgroups comp.sys.hp48 and
  comp.sys.handhelds, as well as other sources.  In particular, some
  parts were taken from older HP48 SX "FAQ Lists".

  For some questions, there may be different answers for each calculator
  (G/GX vs. S/SX).  In this case S/SX specific information is preceeded
  by an "SX:" on the left margin of the first line of each S/SX specific
  paragraph.  G/GX information is denoted by a "GX:" in the same place.
  If a paragraph has no notation, then it is valid for all versions.

  1.2.  This FAQ in Other Formats

  This document was made using the Linux-DOC SGML (Standard Generalized
  Markup Language) package and is available in ASCII, HTML, and
  PostScript versions.  All versions come from the same source, and are
  thus updated simultaneously.

  The URL for the HTML version is
  <http://www.engr.uvic.ca/~aschoorl/faq/>.  The other formats are also
  available here in separate zip files.
  Text only versions of the FAQ will be posted to the newsgroup
  comp.sys.hp48 as needed (usually every two weeks).  Also, remember
  that all official FAQs (including this one) are mirrored at
  rtfm.mit.edu.  Furthermore, it is posted to comp.answers and
  news.answers.

  I will sign all text versions with PGP (Pretty Good Privacy) using the
  following key for authenticity, and provide MD5 Checksums for the
  remaining files.  You can get a copy of this public key through the
  URL above.

  Type bits/keyID    Date       User ID
  pub  2048/3CD1B675 1995/01/19 Andre P. Schoorl <aschoorl@engr.uvic.ca>
            Key fingerprint =  33 BF 8C EC A1 2B 13 11  AE A3 FE 3E 00 A1 31 4D

  Alternatively, you can download the FAQ at one the following
  locations:

     North America:

     o  <ftp://ftp.cis.com/pub/hp48g/uploads/>

     o  <ftp://ftp.cis.com/pub/hp48g/documentation/>

     o  <ftp://oprfhs.org/pub/hp48/incoming/>

     Europe:

     o  <ftp://ftp.stud.fh-heilbronn.de/pub/hp48/incoming/>

     o  <ftp://ftp.stud.fh-heilbronn.de/pub/hp48/info/FAQ/>

  2.  Miscellaneous Questions

  2.1.  I'm a novice, and I have some questions.  Where should I start?

  Start by perusing the HP48 manuals.  You'd be amazed how many
  questions can be answered if you read the manuals.

     SX:
        Earlier HP48 S/SX manuals came in two volumes. The first volume
        dealt with operating instructions, and the second volume dealt
        with programming.  Later HP48 S/SX manuals combined these two
        volumes into one.

     GX:
        HP48 G/GX models come with a one-volume owners manual that
        covers all of the non-programming aspects of the calculator.  An
        Advanced User's Reference (AUR) is available that covers
        programming aspects.  It is highly recommended.  They also come
        with a Quick Start Guide, a guided tour of some of the HP48's
        capabilities.

  Also, look over the section "Answers to Common Questions", in Appendix
  A of the manual.  If you have a two-volume manual, it will be in
  volume II.

  2.2.  What Usenet Newsgroups are there for the HP48?

     comp.sys.hp48
        Primary HP48 newsgroup.

     comp.sys.handhelds
        Occasionally, HP48 information is posted to this newsgroup.

     comp.sources.hp48
        This newsgroup has been dead for years, but was once a moderated
        group for HP48 Programs.

  Articles posted to the newsgroup comp.sys.hp48 are archived at
  <ftp://wuarchive.wustl.edu/usenet/comp.sys.hp48/>.  Articles are
  archived by year and month, with a general index covering
  approximately the past two years.

  The AltaVista search engine at  <http://www.altavista.digital.com>
  also accesses these archives (for a Usenet search), and automatically
  uncompresses any relevant articles you may select.

  DejaNews  <http://www.dejanews.com/> is another fast Usenet
  archiver/searcher, with many extra features such as Author profile and
  article search.

  Another good way to find HP48 posts is through one of the various
  search engines available on the web.  For example, Netscape, Lycos,
  and Magellan and others all seem to be able to find Usenet articles on
  the HP48.  The search may even find articles that have long since
  expired from your local news server!

  2.3.  What are some good FTP sites for the HP48?

  Many HP48 programs can be found on the following FTP sites:

  o  <ftp://ftp.cis.com/pub/hp48g/>

  o  <ftp://hpcvbbs.external.hp.com/dist/>

  o  <ftp://oprfhs.org/pub/hp48/>

  o  <ftp://wuarchive.wustl.edu/systems/hp/hp48/>

     For a list of other HP48 FTP sites, see Appendix E-2.

  2.4.  Are there any good WWW links for HP48 stuff?

  Rather than list out a long list of HP48 related WWW resources, here
  is a single HP48 Page which contains links to other HP48 pages:

  o  <http://www.gmi.edu/~madd0118/hp48/>

  2.5.  Is there an HP48 IRC Channel?

  Yes, try joining channel #hp48.  Many of the most knowledgeable HP48
  users frequent it, making it a nice place to get your questions
  answered.  There is even an IRC robot "BeeFbot" which can send you
  some of the latest versions of HP48 programs.

  2.6.  How can I search for a specific HP48 file?

  If you know the all or part of the filename of an HP48 program, you
  can use the proper InterNET search services instead of bothering all
  the readers of the newsgroup.  The following server is especially
  good, it seems to find HP48 files from just about anywhere.

       <http://ftpsearch.unit.no/ftpsearch>

  2.7.  What are good places to buy HP48's and accessories?

     Educalc:
        Educalc carries a complete line of HP calculators and
        accessories.  They also sell used HP48's, and buy them as trade
        ins.  To get a free catalog, call them.  Their WWW page is
        <http://www.educalc.com/> or you can e-mail them at
        <rebecca@educalc.com>

          Toll Free Order:    (800)-677-7001  \___ Orders and Customer Service
          Toll Order:         (714)-582-2637  /    8-5, M-F, West Coast Time
          Credit Card Order:  (800)-535-9650 ext. 9162 (all hours, all days)
          FAX orders:         (714)-582-1445
          Technical Support:  (714)-582-2637
          "Para ayuda en Espanol - pregunte por Irma"

     Elek-Tek:
        Elek-Tek seems to only carry HP name brand products.  Their
        prices may be slightly cheaper than EduCalc, but they don't
        carry non "HP brand" products (such as RAM cards), that are much
        cheaper than HP brand ones.

          Toll Free: (800)-395-1000      Order: (708)-677-7660
          Fax: (708)-677-7168            Fax Orders: (708)-677-1081

     HP48 Head Quarters:
        You can order HP48's and accessories online at
        <http://www.hp48.com/>

     X-Philes CD-ROM:
        There is now a CD-ROM called the X-Philes on the market that
        includes many HP48 files.  See the next question for more
        details.

     Office Max:

          Toll Free: (800) 788-8080

     Others:

     Executive Photo and Electronics
     120 West 31st St., New York, NY 10001-3485
     Tel: 800-223-7323 or 212-947-5295
     Fax: 212-239-7157

     Global Connections Incorporated (formerly Connection Point, Inc.)
     50 South River Street, Suite 105, Janesville, WI 53545
     Tel: (608)-752-9548 or (608)-752-1537

     Spectrum Office Equipment
     22 Stokes Croft Bristol (U.K.).
     0117 9428278

     Best (Western U.S., used to be La Belles) 1-800-950-2378

     Calculators Inc., Minneapolis, MN, U.S. (612) 866-8908

     Carrington, (800) 982-3731

     J&R Music World - Computer World 1-800-221-8180

     Office Depot (U.S. and Canada)

     Service Merchandise (East Coast U.S.)

  2.8.  Are there any CD-ROMs with HP48 software?

  Yes, there are two CD-ROMs with HP48 software I know of:

     X-Philes:
        The X-Philes is a CD-ROM made by Synchron Data that contains
        most HP48 programs to date.  All together the CD-ROM contains
        over 21,000 files and more than 620 MB of information, mostly
        zipped.

        The HP48 sections contain 3194 files and make up 38.5 MB of the
        total.  This includes all of the EduCalc Goodies disks (aka Horn
        disks) 1 through 10.

        There are also files for HP95, Psion, TI-82 and TI-85
        calculators, as well as information and programs on:

        Jokes, Star Trek, Sports, Midi, History, Strange files,
        Conspiracy, Law and Business, Internet & Networks, Atari, BBS-
        Systems, Hardware, Computers, 3D-Objects, Anarchy, Hacking,
        Movies, X-Files, Music, Magazines, Science, UFO and Aliens,
        Occult, Security & Privacy, Amiga, Cyberspace, Subcultures,
        Radio, Virus hunting, Survival, Phreaking, PC utilities, Game
        cheats and levels, and Programming.

        The CD comes with easy to use Windows software for browsing and
        searching for keywords.  This software contains an upload
        feature that allows you to transfer programs directly to your HP
        (or modem) using X-Modem.

        More information on obtaining the X-Philes CD-ROM is at:

        WWW:  <http://www.algonet.se/~synchron/>

        E-Mail: <dt93tn@pt.hk-r.se>

        Regular Post:
          Synchron Data
          Tranbarsvagen 25:14
          372 38 Ronneby
          Sweden

     SHAREWARE Volume 1 for Hewlett-Packard:
        There is a CD-ROM by a German company called Yellow Computing
        named SHAREWARE Volume 1 for Hewlett-Packard.  It sells for DEM
        49.80 (U.S.$ 34.00), and is distributed from:

          Yellow Computing                Phone +49 7136 951143
          Computersysteme GmbH              Fax +49 7136 951111
          Postfach 1136
          D-74173 Bad Friedrichshall
          Germany

     This is the German company which offers PC <-> HP-48 transfer
     cables together with Windows software for transfering files (the
     "Transfile Win 48" package).

     The CD-ROM comes with a 16 page booklet in German and English which
     shows how to use the included Windows 3.1 transfer program (with
     program and catalogue files in both languages).

     It's sampled in Aug 95, pressed Oct 95 and contains about 85 MB of
     software for the HP48 SX/GX, 95LX, 100LX and 200LX; the Horn disks
     1 through 9, and about 710 additional HP-48 programs in the 9
     categories: Animation, Data, Games, Graphic, Programming, Maths,
     Memory, Science, Utility and Communications.  It also has about 200
     other unsorted, compressed HP48 files.  Decompression software is
     included.

     It's not an ISO CD-ROM, since it contains directories and files,
     whose names contain exclamation marks, hyphens and dollar signs.

  2.9.  Is there an HP48 Emulator?

  A fully functional HP48 emulator by Eddie Dost called "x48" is
  available.  It runs in X-Windows on any Unix based operating system
  like Linux or Solaris.  However, it requires a ROM dump of an HP48 to
  run.  Of course, due to copyright laws such a ROM dump cannot be
  distributed with the x48 package.

  Therefore, you must be the proud owner of an HP48 (S/SX or G/GX) in
  order to create your own ROM dump.  The emulator will look and act
  either like a S/SX or a G/GX, depending on what type of ROM dump you
  give it.  Further instructions are contained in the x48 package
  itself.  The latest version of x48 is available at
  <ftp://ftp.cis.com/pub/hp48g/uploads/x48-040.zip>

  You can try looking for emulators for other operating systems at:

  o  <ftp://oprfhs.org/pub/hp48/>

  2.10.  Is the HP48 Allowed on SATs, AP, or ACT Tests? (U.S.)

  From: Jack Levy

  The S/SX/G/GX are allowed on the SAT's.  The S/SX/G/GX are allowed on
  the SAT II Math IIc test, but no calculators are allowed on any of the
  others.  The S/SX/G/GX are allowed on the AP Calculus exam.  However,
  only the S/SX are allowed on the AP Chem and AP Physics exams because
  the G/GX has the built in equation library.

  Update from: Sandler Rubin

  As of 1996, HP 48G calculators are allowed on the physics and
  chemistry APs, but only for the free response section.  All
  calculators are now banned on the multiple choice sections on the
  physics and chemistry APs.  As for calculus, the HP 48G is allowed on
  one half of the multiple choice and all of the free response.  The
  other half of the multiple choice on the calculus test must be
  completed without any calculator.

  These changes have occurred because the AP tests are now more
  conceptual and depend less on pure "number-crunching".  In the free
  response sections of the chemistry and physics tests, lists of
  important physics equations are include for student use which
  basically make the HP 48G EqLib redundant.

  From: Mark Wilson:

  The HP48 is not allowed on the ACT test.  The reason for this is the
  IR capability.  Specifically, "Those graphing calculators are
  restricted only to the extent that they may not have the capability
  for making any kind of noise or producing paper output, require power
  cords, have a QWERTY keyboard or be able to communicate wirelessly
  with another calculator."

  As quoted from the development division director of ACT.  The ACT
  organization does not plan to change this policy in the near future,
  nor will they consider taping over the IR port as acceptable.

  2.11.  When is the next HP coming out?  Should I wait?

  From: Matt Willis

  No-one really knows for sure.  There have been rumours for years now.
  But so far, that's all they have been - rumours.  Those who know,
  won't talk.

  Of course, people will speculate.  But the people who work for HP
  won't say a thing.  While it may be a point of professionalism, it's
  probably also something that they can't do, contractually.  So it's
  rude to ask.

  Why do they do this?  It makes sense, from HP's perspective.  HP,
  unlike some other calculator companies, waits until a product is ready
  before marketing it.  For example, the HP38 was a surprise.  Think
  what would happen to sales if HP announced a new calculator was coming
  out in 6 months.

  Even if HP announced a new calculator tomorrow, I don't think I would
  upgrade right away.  Why?  Well, when the 48 G/GX came out, it went
  through revisions K, L, M, P and then R (to check what version of G/GX
  you have, type VERSION).

  The next calculator, by Murphy's Law, is bound to initially have just
  as many bugs when it first comes out.
  2.12.  How does the HP48 compare with other calculators?

  From: Chin-Yu Hsu <chinyu@voyager.bxscience.edu>

  What are the differences between the HP48 and the TI?

  Before listing the differences, I wish to let you know that the HP48
  has much more functionality than the TI's. However, these additional
  functions are usually of no help in high school than the TI. Instead,
  they are only helpful in college depending on the course you take. The
  TI is probably a better choice on tests in high school since it is
  easier to use (to most people) and does calculations faster (because
  it offers speed at the expense of the higher precision of the HP48).
  Please note that the HP also offers the HP38 which is more comparable
  to a TI-82.

  Also, you should realize that if you want support for the graphing
  calculator, the HP48 is the one to get. Although you can get support
  from Texas Instrument (by phone and by web), and also by teachers in
  school, you can get support for the HP48 from a larger group in the
  world. There are far more web sites related to the HP48 than to the TI
  graphing calculators. Also, the HP48 has its own newsgroup and its own
  IRC channel (usually up 24 hours a day and maintained by a bot that
  can send you programs at your request).  Please note that although the
  calculation and graphing capabilities may not be available for a
  particular calculator, you can usually download a program that extends
  such a capability to it.

  If you find that part of the information below is incorrect, please
  tell me about it. You may need to provide additional proof, if I am
  unable to confirm it.  Any additional information on the TI-92 is
  helpful because much about it is still a mystery.

     General Differences:

           Calculator            HP38     HP48(2)  TI-82(3)    TI-85      TI-92

           List Price(4)        $109.00  $135.00/?  $125.00    $135.00    $250.00

           Available Mem.(5)     32KB    32/128KB   28.2KB     28.2KB     70.0KB

           Batteries Req.(6)      ???      3AAA     4AAA+1     4AAA+1     4AAA+1

           Plug-in Cards          No      Yes(7)      No         No          No

           Infrared Transmit.     Yes     Yes(8)      No         No          No

           Wire Transmit.         Yes      Yes       Yes        Yes         Yes

           Cal-to-PC trans(9)     Yes      Yes       Yes        Yes         Yes

           Overhead display       Yes     Yes(10)    Yes        Yes         Yes

           CBL support(11)        No        No*      Yes        Yes         Yes

           QWERTY keys(12)        No        No*       No         No         Yes

           Screen capture         Yes      Yes     via link   via link    via link

           Screen Resolution   131x64    131x64     96x62      128x64     240x128

           Character Display    22x8      22x8      16x8        21x8      ?????

     Miscellaneous Functions:

           Calculator            HP38     HP48(2)  TI-82(3)    TI-85      TI-92

           Simple Eq. Solver      Yes      Yes        No        Yes         Yes

           Simult. Eq. Solver    ?????     Yes        No        Yes       ?????

           Poly. Root Finder   No limit  No limit     No     30th order     Yes

           # of matrices          10     No limit      5      No limit    ?????

           max matrix size(12) No limit  125x125    15x15      30x30      ?????

     Graphing Functions:

           Calculator            HP38     HP48(2)  TI-82(3)    TI-85      TI-92

           Simultaneous Graph  Up to 10  No limit  Up to 10   Up to 99   Up to 99

           Zoom features          14        15        13         15       ?????

           Graph Tracing          Yes      Yes       Yes        Yes         Yes

           Fnc. Value Tables      Yes       No       Yes         No         Yes

           Parametric Graphs      Yes      Yes       Yes        Yes         Yes

           Polar Graphs           Yes      Yes       Yes        Yes         Yes

           Recur. Seq. Graphs     Yes      Yes       Yes        Yes         Yes

           Diff. Graphs           No       Yes        No         No          No

           Conic Graphs           No       Yes        No         No          No

           3-D graphs             No     7 types      No         No         Yes

           Area under Curve       No       Yes       Yes        Yes         Yes

           Extremum               Yes      Yes       Yes        Yes         Yes

           Roots                  Yes      Yes       Yes        Yes         Yes

           Slopes                 ???      Yes       Yes        Yes         Yes

           Tangent Lines          ???      Yes        No         No         ???

     Statistical Functions:

      Calculator            HP38     HP48(2)  TI-82(3)    TI-85      TI-92

      Scatter Graphs         Yes      Yes       Yes        Yes         Yes

      X-Y line Graphs        No        No        No         No         Yes

      Box-Whisker Plots      Yes       No       Yes         No         Yes

      Histogram Plots        Yes      Yes       Yes        Yes         Yes

      Regression Graphs      No       Yes       Yes        Yes         Yes

      Bar Graphs             Yes      Yes       Yes        Yes         Yes

      Truth Graphs           Yes      Yes        No         No          No

  Notes:

  1. In the specifications, "no limit" usually means that it is limited
     by memory only.

  2. There are four different HP48 calculators. There are the HP48S,
     HP48SX, HP48G, HP48GX. The S and SX models are older models, and no
     one would be getting them anymore since the G and then GX offer all
     the same features, but with additional enhancements to make the
     features easier to use. The G and the GX are also 40% faster than
     the S and SX models. There are only two differences between the G
     and the GX... The G has 32k of RAM, and no expandability, while the
     GX has 128K of RAM and the ability to have two additional plug in
     cards.

  3. There is a new version of the TI-82, called the TI-83 which should
     be available soon. It offers all the features of the TI-82, except
     it has additional statistics and financial functions, as well as
     displaying a table and a graph side by side. Please note that this
     feature is not available on the HP48, but is available on the HP38.
     Also, the TI-83 has an equation solver like the HPs.

  4. Cost for HP calculators does not include cables because they can
     transfer data via infrared. The price for TI's include the cables
     for linking one TI to another. Also, the HP48G's list price is
     $135.00, while the HP48GX's list price is $265.00.

  5. The available memory listed for the HPs are slightly lower than the
     given values. The available memory for the HP48G is only 32 K. The
     HP48GX has 128k of available RAM, and is expandable to 4.5 megs!

  6. The batteries used by these calculators are AAA batteries.
     Rechargeable batteries are not recommended because they have a much
     lower life span than alkaline batteries. The TI's require an
     additional CR1616 battery to retain its memory power. The HP's do
     not need this additional battery, but once you take out the AAA
     batteries, you have about 3 minutes to replace them with new ones
     before it loses its memory. The RAM cards for the HP48GX requires
     an CR1616 battery, however, if you plan to store it outside of the
     HP.

  7. Only the HP48GX support plug-in cards. The HP48G doesn't.

  8. If you are thinking of getting the HP's to cheat on tests because
     of the infrared capability, forget about it. The infrared receivers
     on the HP's only have a maximum range of THREE inches (The HP's
     transmitter has a longer range, up to several feet, but that will
     not help at all unless you are using it as a remote control to
     watch TV, or you are sending to an infrared device connected to an
     AC power source, such as the HP LaserJet 5 printers).

  9. The Calculator to PC (or MAC) requires additional cable and
     software. For the HP, you only need to get the cable, which can be
     made from standard computer parts (a DB-9 and CD cable totaling
     about $15). No additional software is needed because you can use
     any communications program of your choice.  For the TI, you can
     either need to purchase a proprietary software and cable for about
     $60 to $80 at stores or you can download the software free at TI's
     web site, and try to make your own cable.  The same type of package
     is available from HP, but offers programming tools and debuggers,
     and costs about the same price.

  10.
     The overhead display unit for overhead projectors is available only
     for the HP48GX because the HP48G does not have the available
     extension slot to install the necessary interface card.

  11.
     The CBL stands for Computer Based Laboratory. It is created by TI,
     so it is not available on the HP of course. It simply allows you to
     collect data from different sources (sounds, temperature) at set
     intervals and can be analyzed on the calculator. The CBL unit's
     list price is approximately $225. Please note that there is a
     similar device for the HP-48, called the ADCM-48 which is a A-to-D
     converter and I/O interface that can read from four analog and four
     digital inputs.

  12.
     Please note that calculators with QWERTY keys are not allowed on
     the SAT exams. The HP calculators do not have QWERTY type
     keyboards, but you can connect it to your computer and have the
     keys from your computer echo on to the HP calculator after
     installing a simple freeware program.

  13.
     The maximum matrix size on the HP48G is only 42x42. The maximum
     matrix size on the HP48GX is 85x85, but it can be expanded to
     125x125 with the addition of an extra RAM card.

  2.13.  What is the Universal Font Library (UFL)?

  The Universal Font Library, or UFL for short, is a set of libraries
  designed to help reduce the overhead of replacement fonts between a
  number of major HP48 programs.  The basic idea is instead of each
  program containing its own replacement font(s), the fonts are stored
  in a cetral library to save room.  In addition the UFL comes with a
  Font Maintenance Library (FMnt).

  If you use some of the programs in the Best Programs List, you may
  find you need a particular UFL library installed in order to use the
  program.  The UFL is maintained by Andre Schoorl and is distributed
  under the GNU General Public License.  For more information and to
  obtain the UFL package see <http://www.engr.uvic.ca/~aschoorl/ufl/>.

  3.  Questions about ROM versions

  3.1.  What does the SX/GX have that the S/G doesn't?

     SX:
        The HP48 S is the same as the HP48 SX except that the HP48 S
        does not have the two expansion slots of the HP48 SX.  This
        means that the HP48 S cannot be expanded and can only access 32K
        of memory, versus 288K for the HP48 SX (two 128K RAM cards).
        (Actually, there are third-party RAM cards that contain 256K or
        512K on a single card -- this memory is accessed via a bank-
        switching mechanism.)

     GX:
        The HP48 G is the same as the GX except for two differences.
        The GX has the 2 expansion ports, and also has 128K RAM built
        in, whereas the G only has 32K.

        If you plan on heavily using your calculator, you will probably
        find that 32K is not enough memory.  In fact, some of the best
        HP48 Programs will not even fit in this memory!

  3.2.  What is the difference between the HP48 G/GX and the HP48 S/SX?

  The HP48 G/GX calculators are, basically, slightly faster (by 40%)
  versions of the HP48 S and HP48 SX calculators, with more features,
  such as 3D-plotting and a new forms-based interface.  Much of the HP
  Solve Equation Library card is now built-in.  See Appendix B-1 for a
  detailed list of GX features.

  Note, however, that the HP48 G/GX is different from the HP48 S/SX in a
  number of significant areas:

  1. The HP48 GX comes with 128KB RAM, as opposed to 32KB RAM in the
     HP48 SX.  The HP48 G still has 32KB RAM, however.  The HP48 G/GX
     also has twice the ROM (512K), compared the HP48 S/SX (256K).

  2. Much of the HP48 G/GX internals have changed, compared with the
     HP48 S/SX.  Unfortunately, this means that many programs written in
     assembly language or System RPL won't work on the HP48 G/GX.  This
     is especially true of any program that tried to access the display
     memory directly.

  3. The HP48 G/GX CPU runs at 4 MHz, instead of the 2 MHz used with the
     HP48 S/SX CPUs.  However, due to various overheads (memory bank
     switching, etc.), the speed increase between the S/SX and G/GX is
     less than 2 times.  G/GX throughput is approximately 40% faster.

  4. Slot 2 of the HP48 GX can access up to 32 ports (ports 2-33) by
     bank switching.  Each port is 128KB, for a maximum total of 4 MB in
     slot 2.

  3.3.  How can I tell what ROM revision I have?

     GX:
        Type the command "VERSION".  Note that this command is not part
        of any key or menu, and so you must spell it out.

        Type #30794h SYSEVAL.  It returns a string, "HPHP48-x", where x
        is your ROM revision.  This works for both SX and GX.

     SX:

        1. Turn the calculator on (press ON and then release).

        2. Press ON again, and hold it down.

        3. While holding down the ON key, press and hold down the "D"
           key (the fourth white key in the top row).

        4. While holding down the "D" key, release the ON key.

        5. Release the "D" key.  The display should be blank, with the
           exception of three vertical lines (one down the centre, and
           one down each of the right and left sides).

        6. Press the backspace key (it says DROP and CLR over it).  A
           meaningless string of digits should appear in the top line of
           the display (mine says "705D9:1B8DA178E5A111B6" -- yours may
           be different).

        7. Press and hold down the EVAL key.  It should say something
           like the following, where the ? is an uppercase letter
           indicating the ROM version:

             Version HP48-?
             Copyright HP 1989

        8. Release the EVAL key.  Hold down ON and hit "C" (the third
           white key in the top row.  This is a general reset operation
           that returns the calculator to normal from the diagnostic
           stuff (which is where ON-D puts you).

  3.4.  What bugs exist in the various versions of the HP48?

     Rom: A

     o  DEFINE rounds numbers in user-defined functions if STD is not
        the current display mode.

     o  KGET on a zero length file from another machine will cause the
        calculator memory to be cleared.

     o  NXEQ from the Graphics Environment with flag -3 set (SYM off in
        Modes) can overwrite the current equation with a number.

     o  Displaying the clock in 24-hour format causes the one-digits for
        minutes to be incorrect in the alarm catalog.

     Roms: A-C

     o  INV returns an incorrect result if used on an 8x8 or larger
        matrix.  To get around this problem, divide the identity matrix
        with the matrix to invert.

     Roms: A-D

     o  Entering a symbolic complex number in polar form like (A,<B)
        (where < is really the funny little angle symbol), gives an
        expression in A and B that is wrong (the A and B are
        interchanged so A is the angle and B is the magnitude).

     o  If the clock is displayed during an ARCHIVE via RS-232, there is
        a chance (not 100%) that calculator memory will be cleared,
        after the transfer.  The work-around is to turn the clock
        display off before doing the transfer.  Should your memory be
        cleared, you will have to restore the contents of memory from
        the archive.

     o  TRNC and RND allow for an array in level 2 and a symbolic in
        level 1 of the stack. This allows you to put an array in a
        symbolic.  Example:  2 3  '7/8' RND returns

     Roms: A-E

     o  There's a bug in the EquationWriter that is "fixed" in the Rev J
        ROM.  See Appendix C-1 for details.

     Roms: E, J

     o  BESTFIT: Occurs when a two dimensional array is stored in \GSDAT
        (SigmaDAT).  Pressing the BESTFIT softkey multiple times will
        leave a lot of useless reals on the stack.

     Rom: K

     o  First HP48 G/GX released; includes various bugs affecting ports.
        Therefore, the version K ROM was only used in HP48 G units.

     Roms: K, L, M, P

     o  XROOT Function fails when used with list processing unless X=Y.
        It does not corrupt memory.

        FIX: Preceed any XROOT which will use list processing with a
        SWAP

     Rom: L

     o  Second HP48 G/GX released; fixed the port bugs.  This ROM
        version is that present in the 2,000 HP48 GXs sold at the ASEE
        conference for $90 apiece.

     Roms: L, M

     o  HP48 GX may lose all of user memory when: clock is displayed, a
        library object is be stored in user memory, and a RAM card is
        lugged in to port one and merged with User Memory.  If all four
        of these conditions are present and the calculator is turned on
        when the clock is being updated by the system, a loss of all
        User Memory may occur.

        FIX: Just type the following in on your calculator:

          << RCLF -> f << -40 CF OFF f STOF >> >> 91.3 ASN

          Then turn on USER mode

     o  EquationWriter/Character Picker Bug: If the size of the equation
        is greater than the regular size of the screen, calling the
        Character Picker in Equation Writer will garble the screen.

     o  If you store an object into a port > 1 while there is a card
        installed in slot 1, the end-of-obj-sequence marker (00000) is
        written to port 1 instead to the destination port.  This will
        cause the 'Invalid Card Data' warning to pop up each power on
        after a while and, in addition, the memory of port 1 gets
        currupted (if it's writeable).  A temporary fix is to remove the
        card from slot 1 when changing the contents of the card in slot
        2.  However a better fix is to get the STOFIX library (available
        on GD#10 or at HPCVBBS, ~1K in size).

     Rom: M

     o  Evaluating a tagged object which contains an operator (+, -, *,
        /, etc) as the second or subsequent character will leave an
        External and System Binary on the stack, as well as the original
        object.

     Roms: L, M, P

     o  SigmaDAT: Put a NON-MATRIX in \GSDAT (SigmaDAT), run STAT
        graphical apps, edit \GSDAT.  Causes a crash.

     o  XRECV will fail or cause memory lost if the amount of free RAM
        left is not about twice the size of the expected file.

        FIX: See FXRECV on GD 9.  Note that FXRECV is not necessary for
        Rom R, and in fact will not even run properly on Rom R.

     o  RREF does not transform the matrix into Row Reduced Echelon Form
        correctly if the first column of the matrix consists entirely of
        zeros.  It may also return incorrect answers in some matrices.

     Roms: L, M, P, R

     o  portnum: { dir ... var } RCL/EVAL fails if portnum >= 2

     o  Rotation rate to angular frequency conversion bug.  See Appendix
        C-2 for a complete write-up.

     Roms: M, P, R

     o  Repeated executions of FFT or IFFT can cause a memory loss.  The
        FFT and IFFT warmstart problem is caused by a CPU return stack
        overflow during interrupt handling.  The problem can only occur
        when the argument to FFT or IFFT is an MxN matrix with both M >
        1 and N > 1.  The vector argument case is immune to this
        problem.

        FIX: To compute the FFT of a matrix without risking warmstart,
        expand the matrix into its row vectors using ->ROW, compute the
        FFT of each row vector, collect the results into a matrix using
        ROW->, expand the matrix into its column vectors using ->COL,
        compute the FFT of each column vector, and finally collect the
        results into a matrix using COL->.  Except for less precision,
        this is the same result as would be obtained by applying FFT on
        the original matrix.  Use the same procedure with FFT replaced
        by IFFT to compute the IFFT of a matrix.

        Here are program examples implementing the "Matrix FFT" and
        "Matrix IFFT":

          MFFT     << ->ROW FFTLP ROW-> ->COL FFTLP COL-> >>
          MIFFT    << ->ROW IFFTLP ROW-> ->COL IFFTLP COL-> >>
          FFTLP    << -> n << 1 n START n ROLL FFT NEXT n >> >>
          IFFTLP   << -> n << 1 n START n ROLL IFFT NEXT n >> >>

     o  Equation Writer/Equation Library interaction bug: If you pick an
        equation from the EQ library, enter solver for that equation,
        enter an algebraic on the stack like 'X^2', and press the down
        arrow key to view algebraic in EquationWriter, the name of the
        equation will appear in the EquationWriter along with the
        unassociated algebraic.

     Roms: M, P

     o  BESTFIT: Occurs when a two dimensional array is stored in \GSDAT
        (SigmaDAT).  Pressing the BESTFIT softkey multiple times quickly
        can cause a warmstart, or SigmaDAT to be erased. This occurs
        sometimes just by pressing BESTFIT repeatedly, regardless of
        \GSDAT content.  This bug can also be triggered by pressing the
        BESTFIT softkey quickly after pressing any other key.  Simply
        pressing MODL then BESTKEY quickly will trigger the bug.

     Rom: P

     o  PROOT: If you put a matrix of coefficients on the stack and
        press PROOT repeatedly, you will get a warmstart.

     Roms: A-R

     o  MatrixWriter Bug: This shows up when deactivating and
        reactivating any of the two direction movement fields.  If you
        do this, the active matrix field won't move as it's supposed to.
        For example: Launch the matrix writer (check that your GOFORWARD
        field is activated).  Type [1] [ENTER]. The active matrix field
        moves forward as it should.  Deactivate the GOFORWARD field and
        activate it again.  Now enter [2] [ENTER] [3] [ENTER]. The
        digits should show up on the same row, but they don't, because
        after you deactivated and reactivated the GOFORWARD field, the
        active matrix field stops moving according to the movement
        fields.

  3.5.  What is new with the revision "J" ROM? (S/SX)

  The revision J ROM has a faster equation writer, as well as some bug
  fixes.  Scrolling of graphics is also faster.

  One "problem" is that the revision J ROM changed some undocumented ROM
  entry points, which broke those programs that used them.  If you have
  a Rev J ROM, you will not be able to run some old programs.

  3.6.  What happened to ROM revisions G, H, I, O, and Q?

  These versions either were never released to the public, or were
  skipped over.

  I have received confirmation of the existence of a HP48 S with ROM
  revision F.  So it appears revision F was in fact released to the
  public, although very few must have made before revision J came out.

  3.7.  Can I upgrade my HP48 S/SX?

  When the G/GX first came out, HP had a trade in program.  This is no
  longer in operation.  You can either try to sell you S/SX privately,
  or you can trade it in at EduCalc.  Contact them for exact trade-in
  details; their number is in Appendix E-5.

  3.8.  Can I upgrade my buggy GX to the latest ROM revision?

  As far as I know, not any more.  They had a program a in early '94,
  but it is over now.  Contact the following for more info:

       Hewlett-Packard Corporation
       Calculator Support
       1000 NE Circle Blvd
       Corvallis, OR 97330

       Phone: (541)-757-2004 option 1

  3.9.  What's the latest ROM version?

  o  Revision R is the latest ROM version of the G/GX series.

  o  Revision J is the last ROM version of the S/SX series.

  3.10.  Why would I buy a S/SX rather than a G/GX?

  Here's the top reasons to buy a S/SX instead of a G/GX (Thanks to all
  who contributed):

  1. May be slightly cheaper, having only 32K RAM.

  2. It isn't THAT outdated.

  3. So what if it's a little slower?

  4. You didn't need all those useless equations, graphics capabilities,
     and math and science functions anyways!

  5. If you break it, you're out of less money!

  6. You like seeing how much you can fit into 32K RAM.

  7. You like slow file transfers, using Kermit instead of X-Modem.

  8. You want to be able to use all those lists of SYSEVALs for the SX.

  9. You like having only 3 ports available max.  33 is ridiculous!

  10.
     Since it doesn't have a built in equations library it is less
     likely to be banned on tests.

  11.
     Only wimps need GUI's, dialog boxes, and choose lists.

  4.  Questions about the Operating System and Using the HP

  4.1.  I typed RULES on my G/GX and got a crossword puzzle!

  From: Joe Horn

  Many commercial programs (like Windows) have similar hidden screens
  that list the program's design team.  Since they are always so cute
  and well hidden, they are often referred to as "Easter eggs".  The
  RULES command on the G/GX is one such example.

  Try using the RULES command.  The names you see are as follows:

       /----------------------\
       |            M G       |
       |      P   DIANA       |
       |    CHARLIE X B     D |
       | BILL U   N  TED    A |
       | O  A L   N    ALCUIN |
       | B  I    JIM   V      |
       |  RON     S    E      |
       \----------------------/

  ALCUIN was the HP-internal code name of the HP48 G during development,
  because Alcuin was Charlemagne's teacher, and Charlemagne, as you
  remember, was the code name of the HP48 SX.

  The other names in the "Easter egg" above belong to:

  o  BILL Wickes (list processing; "Father of RPL")

  o  CHARLIE Patton (RPL operating system)

  o  TED Beers (parameterized outer loop; interactive stack; key
     handling system; high-level display management; input forms)

  o  DIANA Byrne (project manager; plotting; graphics)

  o  GABE Eisenstein (EquationWriter)

  o  BOB Worsley (I/O)

  o  PAUL McClellan (unit management; math)

  o  CLAIN Anderson (product manager; marketing)

  o  DENNIS York (manager)

  o  JIM Donnelly (EQ LIB; list processing; variable tic logic;
     developer support)

  o  MAX Jones (menu system; editing)

  o  DAVE Arnett (hardware)

  o  DAN Coffin (manuals)

  o  RON Brooks (marketing)

  4.2.  Why does my HP48 occasionally "freeze" for a moment?

  The HP48 must occasionally do "garbage collection" to free up unused
  memory, and it is this garbage collection that is causing the
  momentary "freeze".  "Garbage collection" is where the HP48 scans
  through memory, looking for objects that are no longer used.
  Using less stack supposedly makes garbage collection go faster.

  The easiest way to force a garbage collection is to run MEM DROP.
  Otherwise you can use #05F42h SYSEVAL or the SysRPL command GARBAGE.

  4.3.  What do I do if my HP48 locks up?

  o  NOTE: If you have it, read the sections in the GX manual starting
     on page 5-16, "Special Memory Operations", and "Testing Calculator
     Operation" on page A-9.

  o  NOTE: under most circumstances, your calculator should never lock
     up.  Some earlier versions of the G/GX do this due to bugs.  Of
     course, depending on the program being run, it may appear to lock
     up, but pressing the "ON" key usually interrupts whatever the
     calculator is doing.  If it does lock up, this is usually caused by
     a buggy assembly-language or system RPL program, and, chances are,
     the memory contents of your HP48 are gone (as in "destroyed",
     "terminated", "wiped out", "deleted", etc.).

  1. First, check the batteries to make sure that they are installed
     correctly.

  2. Next, try is pressing the "ON" key again and again very RAPIDLY.
     The operative word here is "rapidly".  It's possible to write a
     program that can only be interrupted during a very narrow window,
     and so you must press the "OK" key again and again very rapidly to
     interrupt the program.  If the calculator doesn't respond within
     ten or so seconds, go on to the next step.

  3. Press "ON-+" a couple of times, just in case the LCD display
     intensity was turned down.  Here, "ON-+" means:

  o  Press and HOLD DOWN the "ON" key.

  o  Press and release the "+" key, WHILE HOLDING DOWN THE "ON" KEY.

  o  Release the "ON" key.

  4. If this doesn't work, the next thing to try is ON-C.  This is a
     "warm-start" or "system halt".   Note that this will CLEAR the
     stack.  Here, "ON-C" means:

  o  Press and HOLD DOWN the "ON" key.

  o  Press and release the "C" key, WHILE HOLDING DOWN THE "ON" KEY.

  o  Release the "ON" key.

  5. If this still does not work, it is possible that the HP is not
     responding because it is not accepting input from the keyboard.  It
     is possible to execute a system halt without the keyboard using the
     hidden reset button.  The reset button is hidden under one of the
     two upper rubber feet on the bottom of the calculator (it's under
     one of the two feet near the serial connector and I/R port).  Note
     that the location of the reset button (under which foot) varies
     from calculator to calculator.  If you gently pull out the rubber
     feet, you'll notice that there is a small hole under each foot.
     The reset button is located in the hole that has an "R" next to it.
     Once you've located the correct hole, you press the button by
     GENTLY sticking an unbent paper clip, into the hole with the "R"
     next to it.  Hold for one second and remove.

  6. The next thing to try is a complete memory reset.  Depending on the
     state of your calculator, this may or may not preserve the contents
     of memory.  At the very least, even if the contents are preserved,
     the contents of the HOME directory will probably be moved into a
     new directory below HOME (HOME will be empty with the exception of
     this new directory); you'll have to manually move the items back
     into HOME.  To perform a complete memory reset, press ON-A-F.  This
     means:

  o  Press and HOLD DOWN the "ON" key.

  o  Press and HOLD DOWN THE "A" key, WHILE HOLDING DOWN THE "ON" KEY.

  o  Press and HOLD DOWN THE "F" key, WHILE HOLDING DOWN THE "ON" AND
     "A" KEYS.

  o  Release all of the keys.

  o  At this point, the calculator will ask you if you want to recover
     memory.  Answer "yes" to this question.  Note that this can take a
     long time.  If you answer "no", all of memory will be cleared (the
     old contents will be lost).

  7. If that fails, you should still be able to induce a complete memory
     reset by removing your batteries and pressing ON several dozen
     times.  This will drain the capacitor that stores information when
     the batteries are removed, and you should get a "Try to Recover
     Memory?" prompt if you have pressed ON enough times to reset your
     calculator.  You should definately try this method before even
     considering the next step!

  8. WARNING: the next method is HIGHLY unrecommended!  Permanent damage
     to your HP can result if you try this.  In particular, you could
     fry a couple diodes used to protect your HP48.  You have been
     warned!

     If your HP48 does not respond to any of the above attempts, you
     might consider reversing the polarity of 2 of the 3 batteries VERY
     BRIEFLY, pressing ON, then correcting the batteries.  Your HP48
     should start with a "Try to Recover Memory?" prompt.  Even
     reversing only 2 of the 3 batteries is dangerous, but it is safer
     than reversing all 3 batteries.

     Note that simply shorting the battery terminals will not discharge
     the storage capacitors.  There are diodes between the battery
     terminal and the storage capacitors which prevent the DC current
     from flowing backward.

     This method apparently drains the capacitors and reverse charges
     them by running current through the parasitic input protection
     diodes in the various CMOS chips.

  9. If all of the above fail, or if you decide not to try the last
     step, you may have to contact Hewlett Packard for service.

  4.4.  My HP48 seems to take longer to turn on and off.

  The usual causes for this are RAM/ROM cards and libraries.  When you
  turn the calculator on, it checks RAM (the more you have, the longer
  it takes), and checks to see if any libraries need initializing.

  Also, having a lot of alarms can supposedly also cause this.

  4.5.  What are all the different ON-KEY combinations?

  From: Dave Arnett

     ON In most cases, this will move you to, or toward, the stack
        environment.

     ON+A+F
        This is the manual Coldstart.  It will break out of almost any
        hung program, and offer you the dreaded option... "Try to
        recover memory?"  Note that this is your next-to-last resort in
        a lock-up, so don't give your machine this three-fingered salute
        unless you really want to possibly clear memory.

     ON+B
        This is the Oops! key for ON codes.  For many ON sequences, this
        cancels the operation, so long as you press the B before
        releasing the ON key.  Try it sometime, if you must, just so you
        remember it.  It can be a life-saver, in case of an accidental
        ON+A+F in process, or even accidentally hitting ON during a
        plotting routine.

     ON+C
        This will initiate a Warmstart.  You'll lose the stack and PICT,
        but it will often get you out of a locked up program with memory
        intact.

     ON+D
        Enters interactive test mode.  Back up your own machine and play
        around.  Exit this test mode with Warmstart, ON+C.  See the next
        question for all the various tests available here.

     ON+E
        Starts a looping self-test mode.  Kinda dull after the first
        five minutes, but it keeps a rather solid tempo.  Exit with
        Warmstart, ON+C.

     ON+4
        Cancels repeating alarms.

     ON+1
        Screen dump utility.

     ON+'+' and ON+'-'
        Adjusts display contrast.

     ON+SPC
        Initiates Coma Mode and clears Warm Start Log.  In Coma mode,
        all the clocked activity is halted.  The battery power drain is
        basically the few nano-amps nA necessary to sustain your RAM
        contents.  The Warm Start Log is a nearly bullet-proof area of
        memory which keeps track of the last four hazardous events.
        View it using the command WSLOG.  This log is one of the few
        things not cleared by a Coldstart.  But it is cleared by ON+SPC.
        Enter Coma this way if you want to clear the Warm Start Log, if
        you are planning to study crystal healing in Tibet for a few
        years and want to keep your pirated version of Tetris alive, or
        you just have a low power fetish.  Exit Coma mode with the ON
        key (tough to remember, huh?), and plan to find your stack
        cleared out.

        Two additional notes on this Coma stuff.  First, I'm not gonna
        try to list the log codes in WSLOG.  Sorry!  Second, if your
        machine is on, and you drop the batteries out, you will usually
        end up in a coma mode to preserve power.  WSLOG will not be
        cleared.  Instead, you will find a code 1 entry there.  Some
        people are paranoid and want to be in Coma when they change
        batteries, just in case they have a sudden emergency call from
        the Prime Minister and don't get back to their battery change
        for a half hour.  If you are one of these...  shall I say,
        weenies?  No, that would be unprofessional ...users, then I
        recommend you use the ON+SPC entry route, rather than the
        kamikaze method of dropping batteries with the machine running.
        Myself, I just turn the machine OFF, like the manual says.

        Now, a Coma story... sort of.  During the G/GX development, I
        maintained a small number of units on which I changed ROM chips
        as incremental code releases came out.  This was so folks like
        Bill Wickes and Jim Donnelly could have fully-real hardware to
        test, instead of just the EPROM handsets some of you may have
        seen.  We always backed up anything of importance in the machine
        before we did this.  But I got into the habit of using ON+SPC
        before I opened up the calculator.  Better than half of the
        time, I could remove the batteries, open the case, desolder the
        old surface-mounted ROM chip, solder down a new chip, and
        reassemble the machine... with all of RAM intact!  When I
        pressed ON, I'd come right back up without a "Try to Recover
        Memory?" prompt.  Pretty good, huh?  The folks who put that mode
        into the machine certainly weren't in a coma.

  4.6.  What are the different interactive self-tests?

  Pressing ON-D enters the interactive self test function of the HP48.
  When you first press ON-D, your HP will beep and you will see 3
  vertical lines, one on each side of the screen and one in the middle.
  You can exit this mode with a Warmstart, ON-C.  The tests are:

     [A]
        Displays CPU speed

     [B]
        LCD test.  Press Enter to cycle through the tests

     [C]
        Internal ROM test

     [D]
        Internal RAM test

     [E]
        Keyboard test.  Starting with [A], press all the keys in order,
        left to right, top to bottom.  If all goes well, the HP will
        show "KBD1 OK".

     [F]
        Partial keyboard test

     [G]
        ESD test monitor.  Battery status is shown by bars.
     [H]
        UART loop-back test

     [I]
        Wired UART echo

     [J]
        Shows what cards are plugged in.  Press any key a few times.

     [K]
        Test RAM cards in ports

     [L]
        Blanks display

     [M]
        Sends system time from IR port

     [N]
        Receives system time from IR port (have another HP send it)

     [O]
        IR loop-back test

     [P]
        IR UART echo

     [S]
        Shows test start time

     [T]
        Shows test fail time

     [U] [V] [W] [X] [Y] [Z]
        Looping test

     [ENTER]
        Initialize test times

     [DEL]
        Test summary

     [<-]
        (Backspace) Enters memory scanner (SX only)

  When the HP48 is in test mode (ON-D or ON-E), the test results that
  are displayed on the screen are also sent to the serial port at 9600
  baud, 8 bits, no parity, 1 stop bit.  This seems to be unaffected by
  any settings in IOPAR, PRTPAR, or the system flags.  I can only guess
  that this feature was included for factory testing purposes.  This
  does explain, however, why the I/O annunciator lights up so much
  during the self test.

  4.7.  I can't account for some of the RAM in the HP48!

  The HP48 S/SX/G have 32K base memory, and the GX has 128K.  However
  not all this memory is available to the user.  The operating systems
  uses memory for system variables, flags, fonts, last stacks, last
  arguments, last menus, and such.  It also can be any one of a number
  of things:

  1. Enabling the use of LAST STACK, LAST ARG, LAST CMD, etc., uses up
     extra RAM, as the calculator has to keep track of the last stack,
     arguments, command, etc..  This is particularly important with LAST
     STACK if you have a large/complex stack, as the HP48 has to keep
     enough information around to recreate the stack after each
     operation.  You can clear out these variables by pressing ON-C (but
     also note that this will clear out the stack, the graphics PICT,
     etc.)

  2. From William Wickes, a member of the HP48 development team: Here's
     a candidate for "most obscure way to use up memory on the HP48 SX."
     When a program executes DOERR with a string argument, the string
     and hence the program too if the string is embedded in the program
     are referenced for the sake of the ERRM command.  Thus if you purge
     the program, the memory used by the program is not reclaimed until
     the ERRM reference is updated to a new string.  If the string is in
     a port, you will get the Object In Use error if you try to purge
     the library or backup object containing the string.  A system halt
     prior to a PURGE will not help unless the object is in port 1 or
     port 2 (it will reclaim memory held by a successfully purged but
     still referenced object).  For port 0 objects, the only way to
     break the reference is to execute DOERR again with a new string.

  3. Occasionally, I have had problems with libraries disappearing, but
     still taking up memory.  I found that an "ON-A-F" reset will cause
     these libraries to re-appear. If you still cannot account for a
     large chunk of memory, I would suggest a hardware reset, after
     backing up your memory.

  4.8.  What are the best methods for installing and removing libraries?

  To install a Library:

  1. Download it into a variable of the calc.

  2. Place the library on the stack.

  3. Type the number of the port in which you want to store the library
     in.  0 is appropriate if you do not have any expansion cards.

  4. Press STO to store the library in that port.

  5. Turn the calculator off and then on, or press ON-C, to finish
     installation of the library.

  Sometimes you have to purge the variable containing the library before
  storing it in a port, if you are low on memory.  See the next question
  for more information.

  If you have FXRECV installed: Just type a port number, hit FXRECV and
  the library will automatically go into the specified port.  All you
  have to do then in turn the calc off and then on to complete the
  installation.

  To delete a Library:

  Say you have library 1234 in port 0 that you want to delete.

  1. Go to the directory to which the library is attached.  In most
     cases this will be HOME.

  2. Enter :0: 1234

  3. Press [ENTER] or type DUP

  4. Type DETACH

  5. Type PURGE

  If this doesn't work, there may be a reference to the library still in
  temporary memory.  Try warmstarting with ON-C, then try again.

  4.9.  How can I attach large libraries?

  If have just successfully transferred a library to your HP, and try to
  store it in a port you may get an "Insufficient Memory" error.  This
  is because your HP is trying to make a duplicate copy to store in your
  port, but it doesn't have any memory to do so.  This is especially
  true on the HP48 S/SX/G since they only have 32K of memory built in.

  The solution is to push the library onto the stack, then purge the
  original variable containing the library.  At this point, the only
  copy of the library that exists is on the stack.  Now you can store
  the library in a port as usual.  This method avoids temporarily trying
  to have two identical copies in memory at the same time.

  For example, say you have a library in 'LIB' and you wish to store it
  in port 0.  You would enter the following:

  o  Go to the directory containing 'LIB'

  o  Recall the library to the stack: 'LIB' RCL

  o  Purge the original from user memory: 'LIB' PURGE

  o  Enter port number to store in: 0

  o  Press STO

  4.10.  Why does (1/3)*3 equal 0.999999999999?

  This is due to the way numbers are typically represented by computers
  and calculators.  There are infinitely many numbers, like `1/3' and
  `pi', that cannot be exactly represented internally (their decimal
  representations go on forever, and often cannot even be represented as
  a fraction, as in the example of `pi').  As a result, any calculations
  that use these numbers are bound to be off.

  4.11.  Why does my HP say that 0 to the power of 0 equals 1?

  Some claim that 0^0 is defined as 1, some claim it is indeterminate.
  The HP mathematicians decided to use the definition.  Here is some
  more concrete info shamelessly lifted from the Sci.Math-FAQ:

     Question:
        What is 0^0 ?

     Answer:
        According to some Calculus textbooks, 0^0 is an "indeterminate
        form". When evaluating a limit of the form 0^0, then you need to
        know that limits of that form are called "indeterminate forms",
        and that you need to use a special technique such as L'Hopital's
        rule to evaluate them. Otherwise, 0^0=1 seems to be the most
        useful choice for 0^0. This convention allows us to extend
        definitions in different areas of mathematics that otherwise
        would require treating 0 as a special case. Notice that 0^0 is a
        discontinuity of the function x^y.

        Rotando & Korn show that if f and g are real functions that
        vanish at the origin and are analytic at 0 (infinitely
        differentiable is not sufficient), then f(x)^g(x) approaches 1
        as x approaches 0 from the right.

        From Concrete Mathematics p.162 (R. Graham, D. Knuth, O.
        Patashnik):

        "Some textbooks leave the quantity 0^0 undefined, because the
        functions x^0 and 0^x have different limiting values when x
        decreases to 0.  But this is a mistake.  We must define:

        x^0 = 1 for all x,

        If the binomial theorem is to be valid when x=0, y=0, and/or
        x=-y.  The theorem is too important to be arbitrarily
        restricted! By contrast, the function 0^x is quite unimportant."

        Published by Addison-Wesley, 2nd printing Dec, 1988.

     References:
        H. E. Vaughan, The expression '0^0', Mathematics Teacher 63
        (1970), pp.111-112.

        Louis M. Rotando & Henry Korn, "The Indeterminate Form 0^0",
        Mathematics Magazine, Vol. 50, No. 1 (January 1977), pp. 41-42.

        L.J. Paige, A note on indeterminate forms, American Mathematical
        Monthly, 61 (1954), 189-190; reprinted in the Mathematical
        Association of America's 1969 volume, Selected Papers on
        Calculus, pp. 210-211.

  4.12.  Is there an Alternative to Calculating in RPN?

  Many people just can't get used to the interaction with the stack to
  do calculations.  A simple alternative is to place your equation in
  tic marks like '8+10*3' and to use the EVAL as an equals key.  This
  way you can enter numbers just as you would write them on paper.

  4.13.  Why do I get unexpected values when I add temperatures?

  Example: I add two temperatures like 34 deg.F and 11 deg.F, and I get
  504.67 deg.F.  Why don't I get 45 deg.F?

  This occurs with the S/SX only.  This behaviour changed in the G/GX.
  With the G/GX, adding 34 deg.F and 11 deg.F will give 45 deg.F using
  TINC and TDELTA.  However, the G/GX will only add or subtract
  temperatures if the units are the same; it is now an error if they are
  not.

  If the units attached to the number consists only of a temperature and
  nothing else, operations are done using an absolute temperature scale
  (relative to absolute zero).  If the units consists of a temperature
  and something else, such as degrees/minute, the operation will not be
  done using an absolute temperature scale.

  It also does not make any physical sense to add two temperatures.  You
  can't add a cup of water at 20 degrees C to a cup of water at 30
  degrees C and end up with two cups of water at 50 degrees C.

  4.14.  How can I add my own units?  What's the 1_? unit for?

  Note: Some later editions of the G/GX series manuals have some similar
  information on this subject on pages 10-14 and 25-15.

  Another feature is the generic unit, 1_?. It seems to be intended as a
  generic unit, to allow you to make new units not based upon any of the
  built-in ones. You could use it to create a conversion utility for
  currencies or bits and bytes.  Before you create either, check the FTP
  sites to see what others have done in this regard.

       Here's an example. Convert this using ASC\e-> and save it as 'sample'.

       "69A20FF78E000000005046F6E6574750ADA209C2A2C2A2070000F368B01B2130
       E20005046F6A756E650ADA20339201000000000000210C2A20F000046F6E6574
       768B01B2130640005086F6D6562750ADA20339200000000000000510C2A20F00
       0046F6E65747C2A20B0000D696E686B0168B01B2130B5000303435453047A204
       7A20C2A20F000046F6E65747ADA209C2A2C2A20F000046F6E6574768B01B2130
       B213047A20C2A20F000046F6A756E6ADA209C2A2C2A20F000046F6A756E668B0
       1B2130B213047A20C2A20F000086F6D65627ADA209C2A2C2A20F000086F6D656
       2768B01B2130B2130B2130F0DA"

  This is a sample directory with a custom menu. Enter the directory and
  press the CST key. Here you will see three units (truncated to fit the
  softkeys): donut, dozen, and homer. A dozen is defined as 12_donut,
  and a homer is a rate of 1.5_donut/min (not part of the SI system).
  These units may take SI prefixes described on page 10-5 of the User's
  Guide, so you may convert the value of 3_MW*h/kdonut into units of
  erg/mdozen using CONVERT, for example. The items in the CST menu have
  the usual abilities of unit menu objects as described on pages 10-2
  and 10-3 of the User's Guide. These units can be used for math
  operations described on page 10-7 of the User's Guide, such as adding
  2_donut to 1_dozen.

  Example: At your power plant, you have four control room operators who
  have a combined consumption rate of 2.28 homers. How many donuts will
  they use in 5 minutes and 17 seconds?

  o  Enter the rate.

       2.28 homer

  o  Enter the time.

       Right-shift UNITS [TIME]
       5 [min]
       17 [s] +

  o  Multiply the time by the rate (*)

  o  Convert to dozens:

       CST Left-shift dozen

  o  The answer is a little over 1.5 dozen.

  4.15.  I want `pi' to be a numeric value, not a symbol.

  You are using "Numeric Constants Mode".  To turn this mode on or off:

     SX:
        Type -2 SF.  This turns the numeric constants mode on.  To turn
        it off, type -2 CF.

     GX:
        Go to the MODES menu (press green/right-shift MODES).  Hit the
        key for FLAG submenu.  Toggle the second flag "Constant -> symb"
        to turn on and off.

  4.16.  What are those little numbers near the top of my screen?

  The little numbers are "user flags".  When you or a program sets any
  of the user flags 1 through 5, little numbers corresponding to the set
  flags are displayed at the top of the screen.

  The HP uses negative flags for setting various modes and functions,
  while positive flags were reserved for the use of the user.  To set a
  user flag type the number, then SF.  To clear a user flag type the
  number, then CF.

  Some programs will use the user flags without you being aware of it.
  So, if you have a "1" at the top of the screen you can type 1 CF to
  get rid of it.

  4.17.  What tricks are there for manipulating matrices?

     SX:
        You can build up a matrix by rows using \GS+.  You can take a
        matrix apart by rows using \GS- These two commands (\GS is Sigma
        (Greek E)) add and subtract rows from the SigmaDAT Statistics
        matrix.  \GS+ takes a vector row and adds it to SigmaDAT, and
        \GS- takes the bottom row away from SigmaDAT.  \GS+ is
        accessible from the STAT menu with its own softkey.  \GS- can be
        obtained by pressing left-shift /GS+, or by typing it in at the
        command line.

     GX:
        The GX has many matrix functions built in.  See Appendix B-1.

  4.18.  Can I use my HP48 as a remote control?

  There are numerous programs available for using your HP48's IR port as
  a remote control.  However, the level of support depends on the
  particular unit you wish to control.  The HP48 is capable of
  reproducing many of the IR controls of many popular brands of
  appliances.

  However, some remotes run at speeds that the HP48 is unable to
  reproduce.  Due to their faster processor speed, the G/GX calculators
  are able to support more remote controls but are still limited in some
  cases.

  With typical remote programs you have to "teach" your HP48 by sending
  it the various IR sequences with the original remote control.  There
  are some advantages to using your HP48 however:

  o  You can impress your friends that you can use your calculator to
     control your TV!

  o  You can set alarms to turn your things on and off at predetermined
     times.

  o  You can use it as a universal remote.

  The best remote program by far is Remote by Bjorn Gahm.  It has a
  large database of existing remotes, meaning you may not have to
  "teach" your HP48 your specific remote if it is already supported.
  However it also have the ability to learn new codes.  See the best
  programs list (later in the FAQ) for the specific URL.

  4.19.  Can the HP48 be used as a DTMF phone dialer?

  To make phone dialing tones, you need to produce two simultaneous
  tones.  The tones used to dial phones are known as DTMF (dual tone
  multi frequency) tones, which consist of two tones at the same time.

  The speaker in the HP48 is not capable of supporting the DTMF tones
  because it can only make a single tone at a time.  The best the HP48
  can do is switch very quickly between one frequency and another.  Some
  attempts have been made in machine language to support DTMF, however
  they have been unsuccessful.  Therefore, you cannot use the HP48 as a
  phone dialer.

  4.20.  How can I run a program on warmstarts and/or power-up?

  You can use some of the utilities available on the Educalc Goodies
  Disks (see Appendix E.5 on where to obtain these):

  o  AUTOBOOT (GD #7) warmstarts every power-up

  o  AUTOEXEC (GD #10) Runs 'GO' every power-up

  o  AUTOPORT (GD #7) Runs &:AUTOEXEC every warmstart

  o  AUTOSTRT (GD #7) Runs AUTOEXEC every warmstart

  Some stack libraries come with support for AUTOEXEC or an equivalent
  built in (for example, the Java library supports AUTOEXEC).  If one of
  the libraries you have installed supports such a feature, you may not
  need any of the utilities above.

  4.21.  I could speed up my HP-28S.  How can I speed up my HP48?

  You can't, really.  Unlike the HP-28S, the clock speed in the HP48 SX
  is hardwired to 2 MHz, and to 4MHz in the HP48 GX.

  However, in some cases, you can speed up the HP48 by turning off the
  display refresh, which supposedly takes up about 11% of the CPU time.
  Detlef Mueller submitted a program called SPEED to comp.sources.hp48
  that turns off the display refresh.  Of course, since it turns the
  display off, it is only suitable for long non-interactive runs like
  calculating large integrals, compiling, etc...  Look in the various
  HP48 archives for a copy.

  4.22.  Can I make my HP graph any faster?

  Try lowering the plotting resolution by typing #2 RES.  You can use
  larger values for faster speed at the expense of number of points
  plotted.  In the GX Plotting Options Menu this setting is known as the
  "STEP" rate.

  4.23.  What is the hidden directory and how do I access it?

  The "hidden directory" is a subdirectory of the HOME directory.  It is
  created on startup, and it contains variables with your alarms and
  user key configurations.    You can use the hidden directory to store
  whatever you want, however you CAN NOT ORDER the contents of this
  directory, as this causes memory loss.

  The name of the hidden directory is a null character, ''.  The only
  way to get a null character is to use a syseval.  You can use the
  following program to access the hidden directory:

           <<  HOME                            (changes to home dir)
               #15777h               (syseval to get null character)
               SYSEVAL                         (returns '' to stack)
               EVAL >>                       (changes to hidden dir)

  To exit the hidden directory, use HOME or UPDIR.  This will return you
  to the HOME directory.

  Also, by putting the null character as a part of your HOME custom
  directory, you can switch right into the directory by pressing the
  softkey.

  Note: The SysRPL command NULLID returns a null character to the stack;
  it is the same as doing #15777h SYSEVAL.

  4.24.  How can I recall one object from a memory archive?

  From: Joe Horn

  There is a little-known method of recalling objects from within
  archives.  Just make a list representing the PATH to the object, and
  tag the list with the port number.  Then hit RCL or EVAL.

  For example, if your archive in port 1 is called BKUP, and it contains
  a directory called GAMES which contains a program called REVERSI, you
  can run the game directly (without having a separate copy of REVERSI
  stored anywhere!) by:

       :1: { BKUP GAMES REVERSI } EVAL

  Or, you can RCL instead of EVAL, and it will be pushed onto the stack.

  o  This method only works in ports 0 and 1 in a GX.  It works on any
     port in the SX.
  o  This method works with directory objects stored as backup objects,
     as well as with the results of the ARCHIVE command, because they
     are both really the same thing.

  4.25.  How do I take the logarithm of a base other than 10 or e?

  To take the log of a number other than base 10 or e, say log x base y,
  you use the formula:

         ln x
       --------    where ln is natural log (log works too)
         ln y

  A quick program to do it would be: << SWAP LN SWAP LN / >>

  With the input of:

       2: x
       1: y

  4.26.  Are there any key combinations that aren't in the manual?

  From: John Meyers

  Yes, on the G/GX there are a few keys that aren't mentionned.  They
  are:

  o  right-shift down-arrow = Review menu keys

  o  right-shift right-arrow = Kermit server mode

  Right-shift View is hidden in Appendix G (Operation Index) of the
  User's Guide Edition 4 (which comes with the calc), among the several
  entries for the word VIEW.

  AUR Edition 1 (in chapter 3, Command Reference, under SERVER) gives
  the alternate keys right-shift cursor right (but of course AUR doesn't
  come with the calc).  This alternative was left out of Appendix G of
  the User's Guide.  Donnelly's HP48 Handbook 2nd Ed. even lists it
  first!

  4.27.  How do I find out about commands not in the GX manual?

  From: John Meyers

  Besides purchasing the Advanced User's Reference Manual (AUR), you can
  look in Appendix G of the G/GX User's Guide, which briefly summarizes
  every command available in the G/GX, including all the commands not
  mentioned anywhere else in the User's Guide.  Often even the brief
  description given in this Appendix is sufficient for you to use the
  command (and to know it exists!).

  Some notes on omissions, however:

  o  VERSION and "_" (attach unit) are missing in Edition 4.

  o  SUB works with arrays in the G/GX, but this is not in the HP
     manuals, nor in Donnelly's HP48 Handbook 2nd Ed 6/93.  You can
     specify any two "corners" of a rectangular sub-matrix (like with
     GET), and it extracts the sub-matrix.  Also works with vectors.

  4.28.  How can one delete (or purge) an entire directory?

  o  To purge a subdirectory and all that it contains, type

  o  To purge all variables in the current directory, but not the
     directory itself, type CLVAR.

  Note that with CLVAR, if the current directory contains a non-empty
  subdirectory, an error occurs at that point, and no subsequent
  variables are purged.

  5.  Questions about cards, data transfers, batteries, and hardware

  5.1.  Can I upgrade my S or G to more than 32K ram?

  It is possible to do this by opening up the case and adding some
  memory chips.  There is a zip file containing instructions and
  schematics available for FTP:

  <ftp://ftp.cis.com/pub/hp48g/uploads/48gs256k.zip>

  There is a web page on how to open your HP48 from the back at
  <http://www.contrib.andrew.cmu.edu/~drury/how2open.htm>

  This is an illustrated guide on how to open your HP48 from the back.
  It has full instructions, as well as 15 pictures of the calculator in
  various stages of disassembly.

  WARNING:  It is possible to ruin your HP in the process of performing
  this upgrade.  Do not attempt it unless you are adept at working with
  small electronics.  The FAQ maintainer and the authors of the
  instructions take no responsibility for anything you do to your HP!

  5.2.  How can I get/build a cable for my HP48?

  Some places that sell the HP48 also sell the cable required for
  interfacing with a PC.  Unfortunately, most don't.

  For information on how to build your own cable, see Appendix D-1.

  If you want to buy one, there are a few options.  Places like Educalc
  and ElekTek sell them for around $20-$25.

  There are a few netters that make cables for sale also.  Contact:

  o  Chris Edmunds <cedmunds@sdl.usu.edu>

  o  Joel Kolstad <kolstadj@peak.org>

  o  Ofer Asif <oasif@herbie.unl.edu>

  A good link on the Internet for do-it yourself cables is

  If you live in a larger city, you can look in the Yellow Pages for a
  listing of HP authorized dealers who either have the cables in stock
  or can order them in about the same time a mail order place can, but
  for a lower price..

  5.3.  Why doesn't the I/R port work farther than a few inches?

  It turns out that it is the receiver that is "crippled".  The transmit
  range is somewhere around several feet, and some people have actually
  written programs to make the HP48 emulate some remote controls (see
  Appendix E-1 for suggested programs).

  There are currently two stories going around as to why.  I will
  present both of them in the interest showing all sides of the story.
  You are free to decide which you believe:

  1. The head of the HP48 design team, Dr. William Wickes himself,
     alluded during the Chicago Handheld Conference that the IR was
     intentionally crippled due to the concerns of certain individuals
     in academia that students could literally 'beam' information from
     one 48 to another during examinations. (from Rick Grevelle)

  2. The reason the IR reception distance is so short is battery
     capacity.  The Infrared Transmitter is semaphore: It is only turned
     on when it needs to be on, and the transmission protocol is defined
     to minimize the ON time.  The receiver, by contrast, must be on
     continually when a transmission is in process, or when a
     transmission is expected. If you set your HP48 to Server mode, that
     receiver is drawing power. If you tweak the control bits to
     activate the receiver for any other reason, it is drawing power.
     The instantaneous peak power drawn by the transmitter is much
     higher than that of the receiver.  But in the long run, the
     receiver will draw more energy from the batteries.  Increasing the
     receiver sensitivity costs even more power.

  5.4.  Can my HP48 talk to my HP100LX via Infrared?

  Yes, it can, although slowly.  Set the HP100LX at 2400 baud, and put
  it in server mode (under the Kermit Commands menu).  Then you can send
  stuff from your HP48 to your HP100LX.

  5.5.  Can I print to a LaserJet printer with an HP48?

  From: Derrik Pates

  Yes you can, but you need the HP PCL library from hpcvbbs.cv.hp.com.
  It allows you to communicate with any printer that supports PCL (all
  HP DeskJets and LaserJets, as well as some other laser printers and
  inkjet printers).  You can hot-switch your resolution and turn PCL
  on/off with software commands.

  The URL for the PCL extension page is:

  http://hpcvbbs.external.hp.com:80/software_archives/calc/
  System_Extensions/pclprint.html

  Although newer HP printers such as the 5P and 5MP have an IR port, you
  cannot use it to print directly from your HP48.

  5.6.  I downloaded a program but all I get is "HPHP48-..."!

  Some versions of Kermit distinguish between ASCII and binary files,
  and so you have to worry about the transfer modes at both ends of the
  connection (the HP48 SX end and the computer end).  For example, when
  receiving ASCII files, Unix Kermit must translate CR/LF pairs into LF.
  If the HP48 SX is transmitting a binary file, but the Unix Kermit is
  expecting ASCII, any CR/LF pairs in the binary file will get
  translated to LF, corrupting the binary file.  Unfortunately, you
  cannot "uncorrupt" the corrupted binary file by simply reversing the
  transfer and expecting Kermit to translate LF to CR/LF.  This is
  because the binary file may contain occurrences of LF that were not
  originally part of a CR/LF sequence.

  When a binary file gets corrupted, it will display on the stack as a
  string, starting with the characters "HPHP48-", and continuing on with
  a bunch of garbage.  Thanks to two programs, these strings can be
  reconverted to binary files right on the HP48.  These programs are:
  FIXIT, by Joe Horn and Mika Heiskanen, or OBJFIX, written by our
  friends at HP.  These are included in Appendix A-2.

  The major difference between FIXIT and OBJFIX is the way they operate.
  I have never personally had any problems with either.  FIXIT takes the
  bad "HPHP48-" string from level 1 of the stack, and replaces it with
  the correct binary object.  OBJFIX takes the name of the variable in
  which the "HPHP48-" string is stored from level 1 of the stack, and
  puts the correct binary object directly in the variable where the bad
  string was stored.  It's up to you which you prefer.  I would suggest
  reading the documentation of both before using either of them.

  There is also a quick fix available from Dan Kirkland:

  Here is a simple SYSEVAL program that will return a pointer to the
  object in those data transfer strings that start with "HPHP48-"

  Checksum: # 8FEh

       << "12" SWAP + # 402Bh SYSEVAL # 62B9Ch SYSEVAL >>

  That's all!  (Simple huh!)  Name?  Whatever you want!!  Works on all
  48s (S/SX, G/GX)

  5.7.  What is the structure of HP48 ASCII headers?

  From: Jorge Costa

  ASCII file headers such as %HPHP: T(3)A(D)F(.); are created by the
  HP48 when an ASCII file is sent to the PC and read when a HP48 ASCII
  file is received from the PC.  They serve to preserve various settings
  on your HP that affect ASCII transfers.  They do not affect binary
  mode transfers.

  Three parameters are saved: (T)ranslation Mechanism, (A)ngle Mode, and
  (F)raction Mark.

     Translation Mechanism:
        The possible ASCII translation schemes are as follows:

     T   HP48 -> PC                  PC -> HP48
     ---------------------------------------------------------
     0   No translation              No translation

     1   char 10 -> chars 10,13      chars 10,13 -> char 10

     2   Action 1 & translate        Action 1 & translate
         chars 128 - 159             \000 - \159 to HP48 chars

     3   Action 1 & translate        Action 1 and translate
         chars 128 - 255             \000 - \255 to HP48 chars

     To choose your favorite set, just type the number followed by the
     command TRANSIO on the HP48 command line.  Depending on which
     translation scheme you are using, the HP48 converts a different set
     of characters to PC ASCII format.  I would advise using option 3,
     since this forces the calculator to translate all symbols to pure
     ASCII (look for the table in page 27 - 16 of the HP48G series
     user's guide).  If you choose to use option 0 or 1, all characters
     from code 128 to 255 would be interpreted following the current
     code page of the PC setup - it will be unreadable!

     Also, if you are receiving ASCII files in your machine and you get
     a bunch of black squares, you can be fairly certain you are using
     translation mode 0, which makes the HP receive and store all
     newline characters (instead of eliminating them).

     Angle Mode:

     o  A(D) stands for degrees.

     o  A(R) stands for radians.

     o  A(G) stands for gradians.

     Fraction Mark:
        The HP48 can handle two types of fractions marks - the decimal
        dot or comma.  This option is available from the MODES input
        form (48G/GX) or menu 64.01.

        With regards to the ASCII header we have:

     o  F(.) means the format is dot.

     o  F(,) means the format is comma.

        If you try manually editing an ASCII file on the PC without a
        header, then try to send it to the HP48 using Kermit, you can
        obtain the following results:

          Number format     Text sent       Result (object stored)
               .               3.4             3.4
               .               3,4             3 4
               ,               3.4             3 4
               ,               3,4             3,4

     As you would expect, sending files with ASCII headers to the HP48
     with mismatching fraction mark settings, leads to an "Invalid
     Syntax" error during transfer.

     Now take a look at rows 2 and 3 of the table above - the object
     received by the HP48 is stored as a program object without the <<
     and >> composed by two real numbers - well, that normally can't be
     done in User RPL!

     In fact the resulting object is a very simple System RPL program
     object (the internal language of the HP48).  The conclusion is that
     when a file is sent without an ASCII header, the HP48 translates
     numbers with mismatching formats into System RPL secondaries
     (programs) of the form:

          :: %IntegerPart %FractionalPart ;

  5.8.  Why do Kermit transfers seem to get slower?

  From: Dan Kirkland

  The reason the HP48 Kermit routines are so slow is because they are
  written in System RPL.  Everytime the HP48 receives a packet (received
  as a string), it copies the previously received packets (string #1)
  and the new packet (string #2) to a new string (which becomes string
  #1 when the next packet is received).  This is why the HP48 Kermit
  gets slower and slower on big transfers (string #1 just keeps getting
  bigger).

  As to sliding windows...  Sliding windows really don't help much with
  a clean, lag-free connection.  And as most people connect their HP48
  directly to the computer they are transfering to/from with a very
  short line, it is almost always very clean and lag-free.  So, sliding
  windows have very little to offer HP48 transfers.

  Yes, properly written Kermit routines should be at least as good as Z-
  Modem, even without sliding windows.  And with a dirty, lagged
  connection, Kermit with sliding windows will blow Z-Modem away.  But
  then, this just doesn't happen very often with HP48 connections.

  Some claim that the HP48 can't do Z-Modem without tons of trickery
  because it doesn't have a large enough input buffer.  While this is
  true, it shouldn't be too hard to do.  And the same is true for Kermit
  if it is going to get Z-Modem type speed!  Small packets are more
  reliable, but much bigger packets are needed for speed.

  5.9.  Why does XRECV not work sometimes? (GX)

  Pre-Rev R. G Series 48's had a bug that would sometimes cause XRECV to
  fail if there was not twice the amount of room free for the incoming
  file. FXRECV, a fix for this bug, is available on the Horn 9 disk in
  the directory \HP as FXRECV.  There is more info about this bug there
  as well.   Note that FXRECV is not required for Rom R, and in fact
  will not run properly on Rom R.

  5.10.  What do the funny symbols in this document mean?

  The symbols in this document such as \-> and \GS+ are the ASCII
  representation of the special HP48 graphical characters.  See the
  section "Character Translations" in the manual for a complete table of
  symbols <--> ASCII representations.

     SX:
        Chapter 33 (Volume II if 2 volumes)

     GX:
        Page 27-16 HP48 G Series User's Guide

  5.11.  What are the pinouts for the HP48 serial connector?

  Looking at the pins of the HP48 (the following diagram is showing the
  pins on the HP48, as you look at the calculator):

                      _________
                     | o o o o |
                      \_______/
                       ^ ^ ^ ^
                       | | | \------ 4 Signal GND
                       | | \-------- 3 RX (input to the HP48)
                       | \---------- 2 TX (output from the HP48)
                       \------------ 1 SHIELD

       Stated another way:

           HP48                    IBM 9 PIN               IBM 25 PIN
           (From the outside
            edge -> inward)
           SHIELD-------------------  SHIELD----------------  SHIELD
           TX (Output)<-------------2 RX (Input)------------3 RX (Input)
           RX (Input)-------------->3 TX (Output)---------->2 TX (Output)
           SGND---------------------5 GND-------------------7 GND

  This information is also on page 27-7 of the G/GX manual.

  5.12.  Is there any information on interfacing to the HP48?

  HP has made available an UNSUPPORTED document called the "HP48 I/O
  Technical Interfacing Guide", which contains information on the wired
  and serial I/O hardware.  Also, there are a number of guides
  contributed by users on making your own serial/IR hardware.

  Look at  <ftp://hpcvbbs.cv.hp.com/dist/> as well as the other ftp
  sites listed in the Appendix.  If you find a good document, let me
  know so I can put it here!

  5.13.  How can I transfer programs/data from my HP-28S to my HP48?

  You use a program called "INPRT", which is available on GD #9.  Any
  previous version will crash the GX.  The new version's checksum is
  #EDF3h, and the old, SX-only version's checksum is #2280h.

  For each program that you want to transfer, you use the HP 28S to
  print it to the I/R output; INPRT, running on the HP48, reads the I/R
  output of the HP 28S and converts it into a program string.

  5.14.  Can I use rechargeable batteries with the HP48?

  The Rayovac "Renewal" batteries have proven themselves to be reliable
  in the HP48, but there are some problems with Nickel Cadmium (Ni-Cad)
  batteries.   You'll have to decide if using rechargeable batteries is
  worth putting up with the problems associated with them:

  o  You'll have to change batteries more often with rechargeable
     batteries.  Alkaline batteries can deliver power for a longer
     period of time, compared to rechargeable batteries.

  o  Once the low-battery indicator comes on, you'll have to change the
     rechargeable batteries pretty quickly.  With rechargeable
     batteries, you have only a few minutes before the calculator dies
     (it's been said that you have up to 15 minutes or so).  With
     alkaline batteries, you have an amount of time that is supposedly
     measured in hours.

  o  Ni-Cad batteries lose their charge with time, even if you are not
     using them.  Even if a Ni-Cad battery is just sitting unused on a
     shelf, it slowly loses its charge.  Alkaline batteries keep their
     charge for a very long time.

  5.15.  How can I tell, from within a program, if the battery is low?

  The following 48 program reports the status of the ALERT annunciator.
  The ALERT annunciator is activated by alarms or low battery.

  This program is provided free of charge "as is" and has no warranty.
  No one is liable for any consequential damages.  Preston

       %%HP:T(3)A(D)F(.);
       \<<
       RCLF
       8 STWS #FFh #0h +
       #10Bh
       #6595Ah SYSEVAL
       #8h AND #0h >
       SWAP STOF
       \>>

  5.16.  I lost the information on my RAM Card when I changed the bat-
  tery!

  You forgot to turn ON the calculator before changing the battery.  The
  HP only supplies power to the RAM card while the HP is turned on.
  While the calculator is turned off, no power is supplied by the
  calculator, and all power comes from the RAM card battery.  If you
  then take out the battery from the RAM card while the calculator is
  turned OFF, the RAM card has no source of power, and you will lose all
  of the contents in the RAM card.

  5.17.  Why do I get an "Invalid card data" error when I merge a RAM
  card?

  This message is usually seen when you plug a brand-new RAM card into
  an HP48.  In this case, this message is normal and is harmless.  It
  just means that there was no (valid) data on the card.

     GX:
        This message can appear when a RAM card contains ports you have
        never used.  Press purple/left shift-LIBRARY. Hit NXT, then the
        PINIT softkey.  This will initialize all available RAM ports.
        It does not affect data already stored on the card.

        If you see this message under any other conditions, it could be
        one of the following:

        1. You took the battery out of the RAM card while the card was
           out of the calculator, therefore erasing the memory.

        2. You took the battery out of the RAM card while the card was
           in the calculator BUT the calculator was turned off.  Note
           that the calculator supplies power to the RAM card ONLY when
           the calculator is turned ON.  Again the memory on the card is
           gone.

        3. The RAM card battery is dead.

        4. There is a problem with either the calculator, the RAM card,
           or both.

        If the battery is operational, then try to store something on
        the card.  If you still get the error message, then backup all
        your info to a computer or another 48, and do a hardware reset.

  5.18.  I've heard about other manufacturer's RAM cards.  Will they
  work?

  While some cards may work, there is a chance that you may severely
  damage your HP48.  You should only use cards specifically designed for
  the HP48.  Naturally, HP sells such cards, and some third parties also
  make cards that will work in an HP48.  Some cards work with both the
  S/SX and the G/GX.  Some, however only work on the S/SX, or only on
  the G/GX.  Make sure that the card is designed to work for your
  version before using it.

     SX:
        The S/SX can only naturally support up to 128k per port.  HP
        sells 32K and 128K RAM cards.   However, TDS, using software
        "bank switches" produces 256K and 512K RAM cards.  These bank
        switching cards do not work in the G/GX series.  CMT is also
        makes 128K cards, which work in all HP48 calculators.

     GX:
        While you cannot use the TDS 256K and 512K cards, Sparcom has
        come out with 256K and 512K cards for the G/GX only.  HP also
        sells 1MB RAM cards that work for G/GX only.  The G/GX is able
        to accept a 4MB RAM card, but none are on the market at this
        time.

  5.19.  How does RAM card locking work?

  From: Dave Arnett

  The HP48SX had three layers of write protection:

  o  The Seiko-Epson memory cards contain write protection.  Seiko-Espon
     is the OEM manufacturer for HP brand cards.  They developed the
     format, connector and pin definitions for the memory card
     interface.  We have a slightly modified version of their standard
     card where the low battery alarm limits are changed slightly.

     On an HP-branded RAM card, if you move the write-protect switch to
     the Protect position, two things happen.  First, the card itself
     ignores write cycles.  This is the first layer of defense for data
     integrity.  The card also changes the voltage level of one of its
     output pins to tell the HP that it is write-protected.

  o  The HP CPU chip detects the write protect indicator line of the
     card.  If it is reporting as unwriteable, the hardware locks out
     write functionality from the CPU chip.  This is the second layer of
     defense.  If this Card Detect line reports as writeable, then write
     transactions are permitted in hardware.  If the Card Detect line
     floats, the hardware reports that no card is installed.

  o  The HP system firmware checks the status of the write protection
     bits before writing to a memory card.  If the status bits indicate
     that the card is unwriteable (ROM or protected RAM), then the
     system code refuses to write to the card.

  In developing the HP48GX, we changed card handling in some significant
  respects.  I have recently posted information to the newsgroup on how
  the upper half of ROM and the card slot 2 are controlled through one
  pin of the Yorke CPU IC in a multiplexed fashion.  There are some
  details about the Yorke chip related to how various Saturn Bus deviced
  configure and unconfigure which required me to make the following
  hardware assignment changes:

       Hardware Resource            HP48SX            HP48GX

       CE1- Card Controller 1       Card 1            Bank Select Controller
       CE2- Card Controller 2       Card 2            Card 1
       CE3- Card Controller 3       Unused            Card 2

       CDT1- Card Detect 1          Card 1            Card 2
       CDT2- Card Detect 2          Card 2            Card 1

  Clearly, we had to assign Card Controllers and Card Detects in pairs,
  as much as possible.  Otherwise the hardware lockout would make a mess
  of things.

  A write protected RAM card in GX slot 1 has hardware lockout
  protection, since CDT2 can lock write actions to CE2.

  A write protected RAM card in GX slot 2 does not have the same HP
  hardware protection.  CDT1 is hardware coupled to CE1, which drives
  the Bank Select Controller.  Some may have wondered in my recent posts
  why the protocol for setting up bank settings uses READ operations
  rather than WRITE operations.  Now you know:  A WRITE operation to the
  Bank Select Controller would be ineffective if a ROM or Write-
  Protected RAM card is in Slot 2!

  The closest approximation to hardware write protection lies in the BEN
  (Bank Enable) line, which is bit 6 of the Bank setting.  Unless BE is
  set high, all attempts to access slot 2 are forbidden.  BEN is pin 10
  of the 74HC174 chip.  This line goes to pin 5 of the NAND chip to
  prevent Card Pin 21 from going active.

  The protocol in the HP48GX RPL Opertaing System implementation is to
  always leave BEN low, unless slot 2 activity is needed.  BEN should be
  set low again after card access is complete.

  So an HP48GX has three levels of card write protection as well:

  o  The card should prohibit Write activity if the protection switch is
     set.

  o  Slot 1 has the same hardware lockout as in the SX.  Slot 2 has a
     multi-step process necessary to enable access.

  o  The RPL system code checks the write-protect status before writing
     to a card.  It understands that CDT1 and CE3 map to card 2.

  5.20.  Why does the HP48 SX display flicker slightly?

  Display flicker is usually caused by fluorescent lights.  The rapid
  pulsing of the fluorescent lights (60 Hz in the the U.S. and Canada),
  which is normally unnoticeable, interacts with the rapid
  pulsing/scanning of the HP48 LCD display (64 Hz refresh rate), which
  is also normally unnoticeable.  The 60 Hz fluorescent lights alias
  with the display refresh (64 Hz) to produce a 4 Hz "flicker".  It's
  normal and harmless.

  Outside the U.S. and Canada, power is supplied at a 50 Hz rate, not 60
  Hz.  This means that the display "flickers" at a 14 Hz rate, which is
  still noticeable.

  5.21.  I broke the LCD screen is there an easy way to get another?

  Unfortunately, as far as I am aware, you cannot get a replacement, the
  cheapest alternative is to send the calc in for "standard service" at
  HP, which is slightly cheaper than a new calculator.  Opening an HP48
  is quite difficult anyway.

  5.22.  How can I protect my LCD?

  There are many ways to protect the HP48's LCD.  The solutions include:

  o  Inserting a piece of cardboard into the case.

  o  Cutting plexi-glass and putting it into the case (slightly better
     than cardboard).

  o  Buying a hard case from EduCalc.  A variety of types are available,
     including a hard leather case or a totally waterproof case.

  o  Keeping it in a video cassette or pencil case during transport.

  o  Using the cover from an old TI-8x calculator and fitting it into
     the grooves on the side of the HP48.  Some people have had some
     success with this, but I find it barely fits.
  5.23.  Can I use my Amateur Radio with my HP48?

  Yes, however you need to have a few things, the first being an amateur
  radio license.  The next thing you need is a terminal node controller.
  If you are able to, get a terminal node controller that supports XON
  and XOFF software flow control.  This is good to have because the HP48
  only has a 256 character buffer.  When the buffer is full, the HP48
  sends the "buffer full" signal and a terminal node controller with
  software flow control can quit sending data until the HP48 can keep
  new data in the buffer.  If you don't have a terminal node controller
  with software flow control, you can still use it, but you may lose
  some data.

  The next thing you will want is some software to use with the terminal
  node controller.  You could make your own software using user-rpl
  commands such as BUFLEN, SRECV, and XMIT.  However, there is a
  plethora of software available.  All you need is software then can
  send and receive data from the serial port.  Here are a few programs
  that you might want to try:

       Program                 Location
       -------                 --------
       term2                   ftp.cis.com

       hp48pack                Send mail to "info@arrl.org" with
                               "get hp48pack" in the body of the message.

       dterm                   ftp.cis.com/pub/hp48g/utilities/dterm.zip

  There is also a site that has a lot of hp48 programs relating to ham
  radio.  Connect to  <ftp://oak.oakland.edu/pub/hamradio/hp48/> Please
  inform the FAQ maintainer if you find additional software, so it can
  be added to this list.

  6.  Questions about programs

  6.1.  Where can I get programs and information for the HP48 SX?

  See Appendix E-1 for more info.

  6.2.  What are the Goodies Disks and where do I get them?

  See Appendix E-5 for more info.

  6.3.  How do I get access to the HP Calculator BBS?

  You can access the HP Calculator BBS via a modem (note that this is a
  long distance call for most people):

       (541)-715-4448          2400 baud, 8N1
       (541)-715-3277          9600 baud, 8N1

  For those people who have access to the Internet, you can also access
  the BBS via  <telnet://hpcvbbs.external.hp.com> or
  <ftp://hpcvbbs.external.hp.com/dist/>

  See Appendix E-4 for more BBS sites.

  6.4.  What are files that end with ".zip", ".Z" or ".gz"?

  Files that end with ".zip" are pkzip archives, which originated in the
  MSDOS world.  One program that can extract the files in ".zip"
  archives is the Info Zip "unzip" program.

  Binaries and source can be found at
  <ftp://wuarchive.wustl.edu/systems/hp/hp48/Posting/unz50p1.exe>

  Files that end with ".Z" have been compressed using the Unix
  "compress" command.  To uncompress these files, you must use the
  "uncompress" command on Unix.

  Files that end with ".gz" have been compressed using the "gzip"
  compression command.  To uncompress these files, you must use either
  the "gunzip" or "gzip -d" command.  The "gunzip" program can also
  uncompress ".Z" files.  Binaries should be on all Unix systems, but if
  not you can try  <ftp://prep.ai.mit.edu/pub/gnu/> More information
  should be there on binaries for other platforms.

  6.5.  What is a "ship" file?

  In the past, programs for the HP48 posted on comp.sources.hp48 were
  posted in the "ship" format.  This format made it easier for the
  moderator to distribute programs, but made it more difficult for users
  to extract and use these programs.  Some people still use ship.

  To extract programs distributed in the "ship" format, you need the
  following:

  1. A copy of the "ship" program, compiled for your platform.

  o  Sources for ship can be found at
     <ftp://ftp.cis.com/pub/hp48g/dos/unship.zip> which also includes
     the DOS executable.

  o  Binaries for other platforms can be also be found at
     <ftp://wuarchive.wustl.edu/systems/hp/hp48/Posting/>

  2. A copy of the latest InfoZip "unzip" program or an unarchiver that
     understands the pkunzip v2.04g format.  Note that you cannot use
     older unzip programs, as old unzip programs do not understand the
     new compression formats.  See the previous section for information
     on where to get source and binaries.

  Once you have a copy of the "ship" and "unzip" programs, you use
  "ship" to convert the ship-encoded file into a .zip file, and you use
  the "unzip" program to extract the HP48 files from the ".zip" file.

  6.6.  What is the ASC format and how can I use it?

  The functions ASC\-> and \->ASC were written by William Wickes to
  facilitate transferring HP48 binary objects in an ASCII format (useful
  when transferring objects via electronic mail or bulletin boards).
  Some HP48 objects, like libraries, cannot normally be converted into
  ASCII, unlike program objects, and these functions make it possible to
  do so.

  The \->ASC function converts the object in level 1 into an ASCII
  string, which can then be uploaded to a computer for mailing.

  The ASC\-> function converts the string object in level 1 back into an
  object.  A checksum is used to ensure that the decoding is correct.

  A copy of these programs are given in Appendix A-1, near the end of
  this file.  Note however, that these functions aren't used much
  anymore.  The standard in the newsgroup seems to first zip the
  programs together and post them uuencoded.  But, you may still need
  these utilities for extracting older files you download.

  6.7.  What is the HYDE library, and how do I get rid of it?

  The HYDE library is a library that changes the messages on your HP48.
  It works on all versions of the HP48 and is available on Goodies Disk
  2.  The program (HYDE.TXT) is in the DNICKEL directory needs to be
  converted with ASC\->.  The instructions (HYDE.DOC) for the program
  are in the HORN2 directory.  The library is 3679.5 bytes, small enough
  to keep on your HP48 so you can install it on a friend's when they're
  not looking.

  Follow the previous instructions for installing the library, then go
  to the library menu and run HYDE.

  However, getting rid of the HYDE library is a little trickier.  First
  you must type JEKY on the command line.  This will disable the HYDE
  library and restore the standard set of messages.  Then you can follow
  the normal instructions for deleting a library.

  6.8.  What is the Minehunt game, and how do I use it?

  The Minehunt game is a game built in to the G/GX.  It was also
  included on the HP Equation-Library Card (for the HP48 SX).

     GX:
        It is located in the UTILS menu of the left-shift(purple) EQ LIB
        menu.  (Left-Shift {EQ LIB], {UTILS}, {MINEHUNT}).  See page
        25-14 of the manual for a game explanation and picture.

     SX:
        It is located in the UTILS library.

  You can save a game by pressing the STO button. This creates a
  variable with the name MHpar. If you are in the directory containing
  that variable, you will resume your old game when you run MINEHUNT.

  To select the number of mines for your next game just store a number
  in a variable, Nmines (it's case sensitive), and you'll get that many
  mines.  If you store a negative number, you'll get the absolute value
  of that many mines, AND all mines will be visible.

  You can also move diagonally if you use the numbers as arrows: 1 is
  down+left, 2 is down, 3 is down+right, 4 is left, 6 is right, 7 is
  up+left, 8 is up, and 9 is up+right.

  7.  Questions about programming and advanced user functions

  7.1.  I've heard the names RPL, Saturn, STAR, GL etc...  What are
  they?

     ASAP
        This is a simple Saturn assembler, written in the Perl language.

     Chip8, Chip48, Schip, Schip8
        This is a machine-code program that was inspired by the chip8
        video game interpreter for the RCA CDP1802 microprocessor
        several years back.  Chip8 allows you to write a simple
        graphics-based video game for the HP48 SX.  Among the games
        written are "clones" of Breakout, PacMan, and Pong, to name a
        few.

        Chip48, Schip and Schip8 are two different names for an enhanced
        version of chip8 specifically designed for the HP48 SX.  People
        have written programs to assemble Schip assembly language into a
        form directly usable by Schip on an HP48.  Schip interpreters
        are available for both G and S series.

     GL GL (Game Language) is a language for the programmer who wants
        almost the speed of assembly, but who doesn't want to spend a
        lot of time and effort to learn all the tricks of assembly
        programming on the HP48. GL has an assembly-like syntax, and
        there is an assembler for PC and one for the HP48 itself. Since
        GL is an interpreter, the GL library (3 KB in size) must be
        installed on the HP48 to run GL programs. The instruction set is
        powerful, with sprites and pixel based graphics, scrolling,
        sound, keyboard control, and more. There are 256 1-byte
        registers which can be used in pairs as 2-byte words. A GL
        program can be up to 64 KB in size.  GL was inspired by SCHIP,
        but it is much better in all aspects.  It is suitable for many
        applications, not only games, that require high speed.  Of
        course it works on both the HP48 S/SX and the G/GX.  GL is
        written by Erik Bryntse.

     ML Machine Language.  This is usually used in reference to HP48
        assembly language programming.

     MLDL
        Machine Language Development Library.  This is a library that
        allows you to debug machine language programs with only an HP
        48.

     PDL
        "Program Development Link".  This is an DOS program, sold by
        Hewlett-Packard, that allows you to write and develop HP48
        applications from your IBM PC clone.  Programs are written on
        your PC, transferred to the HP48, and tested from your PC (and
        not the HP48).

     RPL
        RPL is the name of the language used to program the HP48 and
        HP-28 series calculators.  RPL stands for "Reverse Polish Lisp".
        It's interesting to note that an HP Journal article incorrectly
        described RPL as "ROM-based Procedural Language".

     SASS
        SASS is a simple Saturn assembler, written in C/yacc (BSD Unix &
        Bison).  It uses Alonzo Gariepy's mnemonics.

     Saturn
        "Saturn" is the internal code name for the processor used in the
        HP48, HP-28 series, and many other calculators (just about all
        HP calculators since the HP 18/28 series).
     STAR
        This is the "Saturn Macro Assembler" (how "STAR" comes from
        this, I don't know), an assembler that uses mostly Alonzo
        Gariepy's mnemonics.  It's written in C and runs on many
        different machines (PCs, Amigas, Unix, etc.).  STAR is available
        via anonymous ftp from
        <ftp://hpcvbbs.cv.hp.com/dist/unix/star-1.04.4.tar.gz>

     System RPL
        This is the name for the custom "operating system/language" used
        to program the CPU used in the HP48 calculator.  System RPL is a
        superset of the normal user RPL commands; in addition to the
        normal, user-accessible RPL commands, system RPL includes many
        lower-level functions.  System RPL is a language one step higher
        than assembly language.

        HP has released a system development toolkit (for the IBM PC)
        containing a system RPL compiler, assembler, and loader,
        complete with a couple hundred pages of documentation.  This
        toolkit, while copyrighted, is, for the most part, freely
        copyable.  If you can find a BBS or archive site that has it,
        you can download all of the system RPL files and documentation.

     USRLIB
        USRLIB is a program that takes the contents of an HP48 directory
        and turns it into a library object.  It currently runs under
        MSDOS.

     Voyager
        Voyager is an "interactive disassembler" for IBM PC clones that
        disassembles HP48 SX RPL and machine code.  You download a copy
        of the RAM and ROM in your HP48 SX to your PC, and run Voyager.
        Using Voyager, you can then view the disassembled or unthreaded
        code.  Unfortunately (or fortunately), Voyager uses the HP
        mnemonics, and not Alonzo Gariepy's mnemonics.  Voyager is
        available from the HP BBS <ftp://hpcvbbs.cv.hp.com/dist/>, and
        from various bulletin boards (the HP handhelds forum in
        CompuServe also has a copy).  The latest version is "1.07".

  7.2.  Is there a C compiler for the HP48?

  Yes.  Alex Ramos has written a GNU C back end for the Saturn
  processor.  Check  <ftp://ftp.engr.latech.edu:/pub/alex/hp48/> for the
  latest version.

  7.3.  Why do SysRPL programs run faster than UserRPL programs?

  SysRPL is the built in language, custom designed for the Saturn
  processor used the HP48 family.  UserRPL is a "subset" of SysRPL.  The
  main reason for the speed difference is the fact that UserRPL commands
  have built in argument and error checking.  In SysRPL, the programmer
  is responsible for all error checking to avoid memory clears.

  Note that System RPL is a compiled language and that therefore you
  need a program like Jazz or GNU-Tools to create it.  This means you
  can't edit or view SysRPL on the HP48 directly, unlike UserRPL.
  However both can be run the same way.

  7.4.  What is a good reference for learning SysRPL and ML?

  Jim Donnelly's book "An Introduction to HP48 System RPL and Assembly
  Language Programming" provides 230 pages of step by step instructions
  for new programmers with plenty of examples.  It also comes with a 3.5
  inch disk containing the examples in source form and HP's development
  tools for DOS.  Available through EduCalc for $25 U.S.

  The ISBN number is: 1-879828-06-5

  Also useful are RPLMAN.DOC and SASM.DOC available on Goodies Disk 4.
  See Appendix E-5 for more information.  You might want to also have a
  look at the following URL:  <http://titan.cs.uni-
  bonn.de/~wolfrum/hpbooks.html>

  7.5.  Can I make my own Libraries?  Can I Split Others?

  Yes, you can either use USRLIB in HP's development tools to create
  libraries in DOS, or you can make them right on your HP with hacking
  utilities like Rick Grevelle's D->LIB and L->LIB which can both create
  and split libraries from/to directories.  Look for it on the various
  ftp sites listed in Appendix E-2.

  7.6.  How do I know what library ID number to use for my program?

  Note: While this document says HP48 SX, it is also valid for GX.

  HP48 SX Library ID Numbers Paul Swadener, HP Developer Support.  03
  Sep 1993

  The HP48 will become confused if two or more libraries currently in
  the machine have the same ID numbers. To help third party developer
  efforts, HP maintains a list of HP48 Allocated Library ID Numbers.

  Below are the "rules." The penalty suffered from not following these
  rules is that your library may not work if another library is in the
  machine with the same number.

  1. Don't use any number in the range 000h through 300h. These are
     reserved for HP's use.

  2. Don't use any number in the range 301h through 5A0h unless you have
     been assigned that number by HP. These numbers are reserved for
     developers who are in the business of distributing their software,
     that is, Independent Software Developers.

     To apply for the allocation of an ID# contact Paul Swadener,
     Hewlett-Packard Company, 1000 NE Circle Blvd., Corvallis, OR 97330,
     fax number 541-715-2192, internet address
     paul_swadener@hp6400.desk.hp.com. You must be a registered
     developer and supply the name/nature of your product, and current
     shipping address and phone/fax/internet add./etc.

  3. Use a number in the range 5A1h through 600h for experimental work
     and software. HP does not track the use of these numbers.

  4. Use a number in the range 601h through 6F6h for your personal
     applications, those which you will share, if at all, only to a
     known set of other users for personal uses. HP does not track the
     use of these numbers.

  5. Don't use any number in the range 6F7 through 6FF, as these numbers
     were allocated before the formal allocation process in was
     instituted.

  6. Don't use any number above 700h. These are also reserved for use by
     HP.

  Hope this helps clear up how library numbers work.

  7.7.  What information is there on the internals of the HP48?

  The most important documents are part of the "System RPL" development
  tools, a completely unsupported set of IBM PC tools created by HP
  Corvallis (the creators of the HP48).  The tools, which run on DOS
  machines only, contain documentation on:

  o  System RPL (which includes information on HP48 SX display graphics,
     keyboard control, etc.).

  o  Saturn assembly language ("Saturn" is the name of the CPU in the
     HP48), including information on a Saturn assembler.

  o  A system RPL compiler.

  o  A Saturn object file linker.

     However the documentation is also useful for some of the newer
     program development tools such as Jazz and GNU-Tools.  (See the
     next question on where to obtain these).

  7.8.  Where can I get some programming development tools?

  HP's unsupported System RPL development tools and documentation are
  available to customers free of charge to help them in HP48 application
  development, subject to certain legal terms, which are given with the
  tools (they're too long and detailed to give here).

  You can get a copy in one of the following ways:

  o  Anonymous ftp to  <ftp://hpcvbbs.external.hp.com/dist/>

  o  Get Goodies Disk 4.  For info, see Appendix E-5.

     Alternatively, you can use one of the packages put together by
     members of the HP community.  In particular, Jazz is a library by
     Mika Heiskanen which allows you to program in System RPL and
     Machine Language directly on your HP48!  It requires either an SX
     with a RAM card, or a GX.

  Jazz is available at  <http://www.hut.fi/~mheiskan/>

  There also is GNU-Tools by Mario Mikocevic (Mozgy) which is set of
  replacements for HP's development tools that not only runs on DOS, but
  also typical Unix systems such as Linux and Solaris.  It is
  distributed in both source and binary form.

  GNU-Tools is available at:

  o  <ftp://gnjilux.cc.fer.hr/pub/hp48/gtools/>

  o  <http://www.zems.fer.hr/~mozgy/jwz/hp48.html>

  7.9.  I know UserRPL.  How do I get started in SysRPL?

  Here is a quick guide to learning System RPL.  See the other questions
  for more information on where to obtain the items below.

  o  Learn UserRPL first, and become familiar with most commands.

  o  Get Goodies Disk 4 (HPTOOLS) or GNU-Tools if you have Linux etc...

  o  Get the new release of supported entries, available with GNU-Tools
     (not the entries in Goodies Disk 4).

  o  Read RPLMAN.DOC and/or get Jim's Donnelly book; it makes things
     easier.

  o  Get ENTRIES.SRT from the HP48 IRC channel.

  o  Get the tables from the SAD package by ftp to hpcvbbs.cv.hp.com

  o  Get Jazz for your HP when you are ready.

  o  You can learn a lot by studying the ROM and other people's programs
     with Jazz!

  7.10.  Are there any viruses for the HP48?

  There are several, and most are French.  In the United States, a virus
  called the "Michigan virus" erupted a couple of years ago.  There is a
  program on Goodies Disk 8 that checks for the Michigan Virus.
  Currently, viruses do not pose an appreciable threat on HP48's.

  7.11.  How do I store fields of variable length effectively?

  See Appendix A-5 near the end of this file.

  7.12.  What is "Vectored Enter", and how do I use it?

  From: Bill Wickes

  The HP48 manuals do not document a very powerful feature that we call
  "Vectored ENTER," that allows you in effect to redefine or bypass the
  command line parser and to have a shot at the stack etc. after the
  command line has been executed.

  Keys that execute an automatic ENTER perform a two-step process:

  1. The command line is parsed and evaluated.

  2. The key definition is executed.

     When flags -62 and -63 are both set, the system extends this
     process as follows:

  1. The current path is searched for a global variable named *aENTER
     (where "*a" is the Greek alpha character--character 140).  If
     present, the command line is entered as a string object and *aENTER
     is executed.  If absent, the command line is parsed and evaluated
     normally.

  2. The key definition is executed.

  3. The current path is searched for a global variable named *bENTER
     ("*b" is Greek beta--character 223).  If present, then a string
     representing the key definition is put on the stack, and *bENTER is
     executed.  The string is the key definition object's name if it is
     a command, XLIB name, global or local name, or an empty string for
     other object types; its primary purpose is to implement things like
     the TRACE mode on other calcs, where you can print a running record
     of what you do.

     A simple example of the use of *aENTER is to create a more
     convenient binary calculator, where *aENTER slaps a "#" on the
     front of the command line so you don't have to bother when entering
     numbers.

  7.13.  What is "WSLOG"?

  It is an undocumented feature which stands for "Warm Start Log".  Type
  in WSLOG in caps, and calc will list the time and cause of the last
  four warm starts.  This feature helps HP technical support to fix your
  HP48 in case it crashes.

       0 - log cleared by <ON> <SPC> then <ON>
       1 - low battery condition, auto deep sleep mode invoked to save battery
       2 - hardware failed during IR (time out)
       3 - run through address 0
       4 - system time corrupt
       5 - deep sleep mode wake up (alarm?)
       6 - unused
       7 - CMOS test word in RAM was corrupted
       8 - abnormality was detected about device config
       9 - corrupt alarm list
       A - problem with RAM move
       B - card module pulled
       C - hardware reset
       D - system RPL error handler not found in run stream
       E - corrupt config table
       F - system RAM card pulled

  7.14.  What are SYSEVALs?

  SYSEVALs are addresses that point directly to a location in the HP48's
  ROM. Many SYSEVAL hex strings are System-RPL commands.  Because there
  is no argument checking, it very easy to clear your HP48's memory.

  In the file SYMBOLS.GX, HP designates three types of entries.  The
  first type is "supported."  This means that a particular entry will
  work on ALL versions of the HP48 and HP supports the use of this
  entry.

  The second type of entry is "unsupported."  This means that HP does
  not support the use of this entry and it will not be the same on all
  versions of the HP48.

  The third type is "unsupported-static."  This is an entry to HP does
  not support the use of, but it is the same for all versions.

  7.15.  What are some useful SYSEVALs?

  For a complete list of supported entry points, see the file
  <ftp://ftp.cis.com:/pub/hp48g/uploads/48entry.txt>

  In System-RPL, different HP object types are referred to by symbols.
  These symbols are used to construct stack diagrams, which tell the
  user how to use System-RPL commands.  Here are some of the symbols:

  Symbol  Type                        Example
  ------  --------------------        -----------------
  $       string                      "ABCDEFG"
  id      Global Name                 'A'
  arry    Array                       [[ 1 2 ] [ 3 4 ]]
  grob    HP48 Graphics Object        Graphic 131x64
  #       Binary Number               <1h>
  symb    Symbolic Object             'A^2+B^2'

     To interpret the stack diagram:
        Everything on the left of the -> arrow is the input.  That needs
        to be on the stack before executing the SYSEVAL.  The symbols
        show you which kinds of data to put on the stack.  Once you
        execute the syseval (see next paragraph), the HP will return the
        data back that is indicated on the right side of the arrow.

     To use the following entries, do the following:

        1. Make sure (triple check) that the appropriate arguments are
           on the stack.

        2. Push Right-shift /, you should get a # on the command line.

        3. Enter the hex string exactly as shown in the hex string
           column.

        4. Put an small case h at the end of the hex string.

        5. Press enter.

        6. Type SYSEVAL.

  Here are just a few examples:

  Hex    Sys-RPL Name    Category            Stack Diagram
  ---    ------------    --------            -------------

  15777  NULLID          Supported           ( -> '' )
  30794  VERSTRING       Supported           ( -> "HPHP48-?" )
  3A328  MakeStdLabel    Supported           ( $ -> grob )
  3A3EC  MakeDirLabel    Supported           ( $ -> grob )
  3A38A  MakeBoxLabel    Supported           ( $ -> grob )
  3A44E  MakeInvLabel    Supported           ( $ -> grob )
  3A1FC  DispMenu.1      Supported           ( -> )
  05F42  GARBAGE         Supported           ( -> )
  41F65  WaitForKey      Supported           ( -> #KeyCode #Plane )
  353AB  SYMB>IDS        Unsupported-Static  ( symb -> list )
  40D25  LockAlpha       Supported           ( -> )
  40D39  UnlockAlpha     Supported           ( -> )
  3AA0A  1A/LockA        Supported           ( -> )
  44C31  DoNewMatrix     Supported           ( -> arry )
  44FE7  DoOldMatrix     Supported           ( arry -> arry' T/F )
  1314D  TOADISP         Supported           ( -> )
  13135  TOGDISP         Supported           ( -> )
  39531  ClrDA1IsStat    Supported           ( -> )
  130AC  RECLAIMDISP     Supported           ( -> )
  4E347  TURNMENUON      Supported           ( -> )
  05B15  $>ID            Supported           ( $ -> id )
  05BE9  ID>$            Supported           ( id -> $ )
  3A1E8  DispMenu        Supported           ( -> )
  39BAD  DispStack       Unsupported-Static  ( -> )

  7.16.  What are LIBEVALs?

  From: Joe Horn (Copied from "libeval.doc" on GD 9)

  The G/GX has a new command: LIBEVAL.  It's sort of like SYSEVAL, but
  instead of taking a memory address (which could be ambiguous due to
  the G/GX's massive need for bank switching), it takes XLIB numbers.
  It's a "back door" for us hackers.  Unlike the ELSYSEVAL command in
  the HP Solve Equations Library Card, which only worked for the
  libraries in that card, LIBEVAL works for any library, including the
  hidden ones in the operating system.

       CAUTION: LIBEVAL, like SYSEVAL, is both powerful and danger-
       ous. If used with incorrect input(s) and/or in the wrong
       environment, it can nuke your memory.

  LIBEVAL takes a single user binary integer of the form #LLLFFFh, where
  LLL is the library ID (hex), and FFF is the three-digit function num-
  ber (hex, with leading zeros if necessary).

  For example, the R->B command is XLIB 2 9.  So you can perform a R->B
  by executing #2009h LIBEVAL.  Try it: 10 #2009h LIBEVAL -> #Ah.

  Using it for named commands is unnecessary, but the G/GX is highly
  XLIB oriented (again, due to the need for bank switching), and there
  are many useful and interesting features accessible only through
  LIBEVAL.

  A prime example is the G/GX's inability to programmatically launch the
  new "dialog boxes".  Suppose a program needs to print things; it would
  be awfully nice to be able to throw the I/O PRINT dialog box onto the
  screen.  The User's Guide is no help here, and in fact it would seem
  impossible to do.  But #B4197 LIBEVAL is all it takes!  Try it.  Cool,
  huh?

  7.17.  What are some useful LIBEVALs? (GX)

  See Appendix B-3 for a few GX LIBEVALs.

  7.18.  What is the format of a GROB object?

  Note: I received two very good answers to this question, and each
  cater to a different kind of user, so I will include them both.

     The easy way:
        First, add pixels to the right-hand edge to make the horizontal
        dimension a multiple of 8, then separate the object horizontally
        into groups of four pixels.  Suppose, for example, you want to
        make this into a 22x8 GROB:

          ---------****---------
          --------**--**--------
          -------**----**-------
          ********------********
          ********------********
          -------**----**-------
          --------**--**--------
          ---------****---------

     You would break it up like this:

          ---- ---- -*** *--- ---- ----
          ---- ---- **-- **-- ---- ----
          ---- ---* *--- -**- ---- ----
          **** **** ---- --** **** **--
          **** **** ---- --** **** **--
          ---- ---* *--- -**- ---- ----
          ---- ---- **-- **-- ---- ----
          ---- ---- -*** *--- ---- ----

     Notice, I've added two columns of pixels to make it 24x8.  Now,
     each group of four can be represented by a hexadecimal digit.

          ---- 0          --*- 4          ---* 8          --** C
          *--- 1          *-*- 5          *--* 9          *-** D
          -*-- 2          -**- 6          -*-* A          -*** E
          **-- 3          ***- 7          **-* B          **** F

     Now, replace each group of four pixels with its corresponding
     hexadecimal digit: 00E100  003300  081600  FF0CF3  FF0CF3  081600
     003300  00E100.

     So, your final grob is:

          GROB 22 8 00E100003300081600FF0CF3FF0CF308160000330000E100

     The technical way:

        1. Every HP object format is described in RPLMAN.DOC, see this
           file for more info.

        2. All HP objects are (of course) nibble based.  When viewing
           them on the PC, which is byte based, the low order nib is
           always read and written first.

        3. HP objects begin with a 5 nib prologue which identifies the
           object type (and other things).  This is the prologue for a
           grob object..

             02B1E pr HP:DOGROB
             02B1E @  Graphic prologue (/U GROB)

        4. Every 5 nib sub field of an object, such as prologue, length,
           etc., is read in reverse order (low nib first).  The grob
           prologue would appear E1B20, or 1E 2B x0 in a hex dump on a
           PC.  The least significant nibble of the next field begins
           right at the x in x0.

        5. It is customary to always work with HP objects on the PC with
           the HPHP48-E header (substitute your favourite rom version
           letter) preceeding the prologue.  This gives no hassles when
           downloading via Kermit or X-Modem.

        PC hex dump of a grob object.. ( remember each 5 nib field is
        reverse order )

        1. "HPHP48-E" 8 byte ascii string with msb off

        2. 5 nib prologue, 02B1E (hex)

        3. 5 nib length field, includes length of body AND length and
           height fields!  does not include 5 nib prologue.  So, the
           total #nibs the grob object takes in HP memory is this number
           + 5.  Important!

        4. 5 nib height field  ( yes, it is height then width )

        5. 5 nib width field

        6. body (described below)

        The grob object looking at it using command line EDIT on the
        HP..

          GROB <width (dec)> <height (dec)> < body >

     The body is exactly the same looking at it on a PC hex dump or on
     the command line EDIT.  Just remember to read low nibble first for
     hex dump.

     Because of hardware restrictions, the number of nibs required to
     represent one horizontal line must be even (byte aligned).  So, use
     this method to calculate the number of nibs in one line..   (pascal
     example)

          nibs := width div 4;
          if nibs mod 4 <> 0 then nibs := nibs + 1;
          if odd(nibs) then nibs := nibs + 1;

     Then to get the #nibs in the entire body, multiply it by the
     height.  Remember, the length field must be this total body length
     + 15 !

     For example, a 131 wide grob requires 34 nibs for one horizontal
     line, where 5 of the bits are unused.  The first nib in the second
     line begins at nib 35 for this grob, etc...  If the grob is 64
     lines, then the body is 2176 nibs.  Add 5 for the prologue, 5 for
     the length field, 5 for height, and 5 for width.  Total object size
     (on the HP) is 2196 nibs, or 1098 bytes.  The length field should
     contain 2196 minus 5 for prologue = 2191 (0088F hex)

     Note that for each nib, the right-most bit is the left-most pixel
     on the screen.  This is nearly always the case for graphic memory.

  7.19.  What is the AUR and what information does it contain?

  From: Jarno Peschier <jpeschie@cs.ruu.nl>

  In this text I will try to answer a number of frequently asked
  questions about the HP48 G Series Advanced  User's Reference Manual.
  In the remainder of this text I will use the common abbreviation AUR
  when referring to this book.

  The questions I will try to answer are:

  o  What is the AUR?

  o  What information does the AUR contain?

  o  Do I need the AUR?

  o  Why didn't HP supply the AUR with every HP48?

  o  Where can I get the AUR?

  o  Does the AUR contain any SYSEVALs and/or LIBEVALs?

  o  Does the AUR say anything about SysRPL and/or ML?

     What is the AUR?
        The AUR is just what it's name tells you it is: it's a reference
        manual for the HP48 G Series.  It has the same outside
        appearance as the  HP48 G Series User Guide (the manual you get
        with your HP48 G or HP48 GX when you buy it), except that it's
        much thicker (just under 4 cm).  The AUR contains about 650
        pages of useful information about your calculator.

     What information does the AUR contain?
        The AUR contains information about UserRPL programming, quite a
        lot of programming examples, a complete command reference for
        all the (UserRPL) commands the G Series knows and reference
        lists about all equations, error and status messages, units,
        etc...  Of course it has an extensive index at the back of the
        book.

        Chapter 1: Programming
           Contains: Understanding Programming, Entering and Executing
           Programs, Viewing and Editing Programs, Creating Programs on
           a  Computer, Using Local Variables, Using Tests and
           Conditional Structures, Using Loop Structures, Using Flags,
           Using Subroutines, Single-Stepping through a Program,
           Trapping Errors, Input, Stopping a Program for Keystroke
           Input, Output, Using Menus with Programs, Turning Off the
           HP48 from a Program.

        Chapter 2: Programming Examples
           Contains: Fibonacci Numbers, Displaying a Binary  Integer,
           Median of Statistics Data, Expanding and Collecting
           Completely, Minimum and Maximum Array Elements, Applying a
           Program to an Array, Converting Between Number Bases,
           Verifying Program Arguments, Converting Procedures from
           Algebraic to RPN, Bessel Functions, Animation of Successive
           Taylor's Polynomials, Programmatic Use of Statistics and
           Plotting, Trace Mode, Inverse-Function  Solver, Animating a
           Graphical Image.

        Chapter 3: Command Reference
           This chapter contains one entry for every command (except for
           RULES) from ABS to ZVOL and  + to  ->.  Each entry contains:

        o  A description of what the command does (with stack diagrams).

        o  Ways in which you can access it from the keyboard (with
           submenu you need, or if you can only type it in in Alpha-
           mode).

        o  Which flags the command is affected by.

        o  Remarks, and a list of related commands.

           Often a command has one or more example programs too. This
           chapter is the bulk of the whole book; it's 424 pages thick.

        Chapter 4: Equation Reference
           This chapter contains one entry for every section in the
           built in Equation Library (EQLIB).  Each entry contains: a
           table of used variables and then for every set of equations
           an entry with some more info about the equation set, the
           picture that goes with it (if any), all the equations and one
           or more sets of example numbers and solutions.  The end of
           the chapter has a list of references from which all the
           equations were taken.

        Appendix A: Error and Status Messages
           This chapter contains two tables with all possible messages.
           The first has them sorted alphabetically and shows the
           message, the meaning and the ERRN number in hex.  The second
           has them sorted on ERRN number (and thus on category) and
           only contains the number in hex and the message itself.

        Appendix B: Table of Units
           This chapter contains a table with all units the HP48 G
           Series knows.  It contains the unit (both the name you use on
           the calculator as well as the full name) and the value it
           represents in SI units.

        Appendix C: System Flags
           This chapter contains a table with all the system flags of
           the HP48 G Series.  The table contains the number followed by
           a description of it's use and the results you get when the
           flag is set or clear.

        Appendix D: Reserved Variables
           This chapter contains a table with all the reserved variables
           of the HP48 G Series (ALRMDAT, CST, "der"-names, EQ, EXPR,
           IOPAR, MHpar, Mpar, n1/n2/..., Nmines, PPAR, PRTPAR,
           s1/s2/..., VPAR, ZPAR, SigmaDAT and SigmaPAR) with complete
           information about what they are used for and about all
           possible parameters that can be put into them.

        Appendix E: New Commands
           This chapter lists all the commands that are new to the HP48
           G Series, with a brief description of what the commands do.
           A list like this can be found elsewhere in the HP48 FAQ list
           as well.

        Appendix F: Technical Reference
           Contains:  Object sizes, Mathematical simplification rules
           used by the HP48, Symbolic differentiation patterns used by
           the HP48, the EquationWriter's expansion rules, References
           used as sources for constants and equations in the HP48
           (other than those in the Equation Library).

        Appendix G: Parallel Processing with Lists
           This chapter contains info on parallel processing that makes
           UserRPL look even more like a real functional programming
           language by letting (almost) all the commands  function on
           lists of parameters as well (i.e. adding map capabilities to
           all internal commands).

     Do I need the AUR?
        Yes, you do.  In my humble opinion the AUR is just "The Manual,
        Part II" and every owner of a HP48 G or HP48 GX should have it,
        especially if you are (going to be) programming in UserRPL for
        any reason.  A lot of the frequently asked questions that pop up
        on comp.sys.hp48 are simply questions that are meant to be
        answered by the AUR.

     Why didn't HP supply the AUR with every HP48?
        Since you're reading this FAQ, you're probably gifted: you are
        not an average HP48 user.  The set of "average users" probably
        consists mostly of people that simply never program their HP48
        in any way ("Wow, can it do that too?!").  In this case, they
        will never take one look at the AUR ever again, and since this
        is quite a thick book it would be a waste of money, trees, the
        environment, transportation costs, etc... to supply the AUR in
        every box.  This is probably why HP made it an extra accessory
        for those people that "really need" it.  I think...

     Where can I get the AUR?
        You should be able to buy (or order) it from the same shop where
        you purchased your calculator.  The HP part number is 00048-
        90136.  The book does not seem to have an ISDN number; it's a HP
        part, not a book.

     Does the AUR contain any SYSEVALs or LIBEVALs?
        Yes, it contains exactly one.  The example for the SYSEVAL
        command tells you that #30794h SYSEVAL gives you the version of
        your HP48.  My HP48 GX rev. P gives "HPHP48-P".

     Does the AUR say anything about SysRPL or ML?
        No, it doesn't.

  7.20.  What is the syntax for INFORM, CHOOSE, and MSGBOX? (GX)

  Based on a posting on HPCVBBS by Cary McCallister.  Revised by Joe
  Horn.  Re-formatted by Andre Schoorl.

     INFORM - Create a Custom Input Form

        INPUT:

             5: "title"
             4: { fields }
             3: <format>
             2: { reset_values }
             1: { initial_values }

        OUTPUT:

             Either: 2: { new_values }
                     1: 1

             or:     1: 0

        PURPOSE:
           INFORM creates full-screen custom input forms, similar to
           those of the built-in applications.

        ARGUMENTS:

           title
              Is displayed in font 1 (small) at the top centre of the
              screen.  It may contain any number of characters,
              including 0, but, at most, 31 characters will be
              displayed. Strings longer than 31 character will be
              truncated to 30 characters and displayed with a trailing
              ellipsis.  Line feed characters are displayed as boxes.

           { fields }
              Is a list of the form { field1 field2 ... fieldn } where
              each field is any one of these forms:

                1.    "label"
                2.    { "label" "help" }
                3.    { "label" "help" type1 type2 ... typen }
                4.    { }

           The "label" is a string of arbitrary text from 0 to 26 char-
           acters long (longer strings will be truncated to 25 charac-
           ters with a trailing ellipsis).  The "help" is displayed
           immediately above the menu area as a helpful prompt for the
           user.  The object type specifications list the one or more
           object types allowed in the field, in the form the TYPE com-
           mand returns.  If unspecified, the default help text is blank
           and the field will accept all object types.  If a field spec-
           ification is an empty list, no field is produced; instead,
           the field to the immediate left (if any) is expanded to fill
           the omitted field's space.  This allows further customization
           of form layout; for example, to have two fields in one row
           and three fields in the next.

           <format>
              May be any one of the following objects:

                1.    { }
                2.    columns
                3.    { columns }
                4.    { columns widths }

           Where <columns> is the number of columns that the display
           will be divided into e.g., if <columns> is 2 and there are
           two fields, they will be displayed side by side rather than
           one above the other.  <widths> is the tab width between the
           left edge of each title and its field; this makes vertical
           alignment of fields possible.  Titles longer than one tab
           width will cause the tab to be repeated automatically.  If
           unspecified, the default column count is one and the default
           tab stop width is three.

           { reset_values }
              Is a list of values one per input field which replace the
              values of all fields when the {RESET} key is pressed and
              "Reset all" is selected.  This list must either be empty
              or have exactly one item per field corresponding to the {
              fields } list above.  If empty, then all fields are deemed
              unspecified (i.e., blank).  Each reset value must match
              the type require by the form field. Selected fields may be
              marked as unspecified by using NOVAL as the reset value.

           { initial_values }
              is a list of values one per input field which specify the
              start-up values of all fields when the INFORM command is
              invoked. This list must either be empty or have exactly
              one item per field corresponding to the { fields } list
              above.  If empty, then all fields are deemed unspecified
              (i.e., blank).  Each initial value must match the type
              require by the form field.  Selected fields may be marked
              as unspecified by using NOVAL as the initial value.

        RESULTS:
           INFORM returns the new field values { new_values } as a list
           to level 2 and the real value 1 to level 1 if the user
           completes the input form by pressing {OK} or ENTER.  The list
           will contain one item per field.  Each item will either be
           the last input value for the corresponding field, or NOVAL if
           the field was unspecified.

           INFORM returns the real value 0 to level 1 if the user
           terminates the input form by pressing {CANCL} or CANCEL.

        REMARKS:
           NOVAL is basically a command (an XLIB name) that does nothing
           when evaluated. It can, however, be compared via ==, SAME and
           POS.

     CHOOSE - Create a User-Defined Choose-Box

        INPUT:

             3: "title"
             2: { items }
             1: <initial_item_number>

        OUTPUT:

             Either: 2: { chosen_item }
                     1: 1

             or:     1: 0

        PURPOSE:
           CHOOSE creates a user-defined "choose-box": a displayed box
           containing items from which the user can choose one.

           CHOOSE displays a standard choose box (normal, not maximized;
           single-pick, not multi-pick) with an optional title line.

        ARGUMENTS:

           title
              If any, is displayed in font 1 (small) in the top centre
              of the box.  It may contain any number of characters,
              including 0, but, at most, 22 characters will be
              displayed. Strings longer than 22 character will be
              truncated to 21 characters and displayed with a trailing
              ellipsis.  Line feed characters are displayed as boxes.
              If there are more than four items such that the scroll
              arrows are displayed, the maximum number of title
              characters is reduced to 21.  The title text is displayed
              in the title area in character font 1 (the menu font).  If
              the title string is empty, no title area will be created
              in the choose box, and the whole box will be devoted to
              the items.

           { items }
              Is a list of arbitrary objects.  Each item occupies one
              line in the choose box and is displayed in its command
              line form.  Only the first 14 characters of the displayed
              object will be shown (13 if the scroll arrows are
              present).  If an item contains more than 14 (13)
              characters, it will be truncated to 13 (12) and the final
              character will be replaced by an ellipsis.  If every item
              is a list of exactly two objects, the first object will be
              displayed and the second returned if the item is selected.
              If the number of items exceeds 4 with a title and 5
              without, scroll arrows will be displayed, and moving the
              highlight past the top or bottom of the box will scroll
              through the undisplayed items.

           <initial_item_number>
              Specifies the initial field to be highlighted when the
              display first comes up (ordinarily 1).  A value of 0
              indicates that no field is to be highlighted and that the
              {CANCL} key is to be omitted from the menu, making the
              choose box act as an informational display without user
              selection.

        RESULTS:
           CHOOSE returns the chosen item (or the second object in a
           two-element item list) and the real number 1 if the user
           completes the choose box by pressing {OK} or ENTER.  CHOOSE
           returns the real number 0 if the user terminates the choose
           box by pressing {CANCL} or CANCEL.

     MSGBOX - Create a Simple Message Box

        INPUT:

             1: "Message_string"

        OUTPUT:

             None

        PURPOSE:
           MSGBOX creates a simple pop-up message box over the current
           display, with a 3D shadow to make it easy to recognize, and
           containing any arbitrary text.

        ARGUMENTS:

           Message_string
              Is any string of characters.  The text is displayed in
              font 2 (medium size), left justified, with a maximum line
              length of 15 characters.  Longer lines are broken into
              multiple lines automatically, at word breaks when
              possible, up to a maximum of 5 lines.  Line feeds may be
              included to force line breaks.  The minimum number of
              lines is 2, so single-line messages will have a blank line
              at the bottom of the box.

        RESULTS:
           None.  MSGBOX is exited when the user presses CANCEL, ENTER,
           or OK, but nothing is returned to the stack.

  For examples of INFORM, CHOOSE, and MSGBOX see Appendix B-2.

  7.21.  How do I put checkfields in my INFORM menus?

  From: Matt Willis

  You can't normally do this directly in User RPL.  You can do it in
  System RPL (see Jim Donnelly's book for details), or you can use the
  library at  <ftp://ftp.cis.com/pub/hp48g/uploads/infm2v1.zip>

  I figured that the System RPL version of DoInputForm was unpleasant
  enough to use on a casual basis so I wrote a simple library that lets
  you use check boxes and choose lists from User RPL.

  All it does is stop execution of INFORM just before DoInputForm, then
  search the stack and change object types to check and choose objects.
  Then it restarts the INFORM command.  At the end, it tidies up
  TRUE/FALSE to 1/0 etc...

  Example syntax:

       "Test" {
       "A" "B" "C" } 1 {} { :CHECK: 1  :CHOOSE: { 1 2 3 }  NOVAL }
       IF INFORM2 THEN
          ...insert code here...
       END

  8.  Appendix A: Various Useful Functions

  8.1.  ASC Functions

  Note: Although this document mentions SX only, ASC\-> and \->ASC work
  on both the SX and GX.

  From: Bill Wickes

  ASCII Encoding HP48 SX Objects

  Sending an HP48 SX object via electronic mail can be difficult if the
  object does not have an ASCII form, such as is the case for library
  objects.  There are various encoding schemes available on different
  computer systems, but these require that the sender and receiver have
  similar computers, or at least compatible encode/decode schemes.  The
  programs listed below perform the encoding and decoding on the HP48 SX
  itself, which has the advantage of being completely independent of any
  computer.

  The programs are nominally called \->ASC and ASC\->.  The former takes
  an object from the stack and converts it to a string, in which each
  nibble of the object and its checksum is converted to a character 0-9
  or A-F.  (The object must be in RAM, otherwise a "ROM Object" error is
  returned.)  For sake of easy inclusion in email letters, the string is
  broken up by linefeed characters after every 64 characters.

  ASC\-> is the inverse of \->ASC: it takes a string created by \->ASC
  and converts it back into an object.  When you transmit the encoded
  strings, be sure not to change the string; ASC\-> uses the checksum
  encoded in the string to verify that the decoding is correct.  An
  "Invalid String" error is returned if the result object does not match
  the original object encoded by \->ASC.  When you upload a string to
  your computer, use HP48 translate mode 3 so that the HP48 will convert
  any CR/LF's back to LF's when the string is later downloaded.

  Two versions of ASC\-> are included here.  The first (P1) is in HP48
  user language, using SYSEVALs to execute system objects.  P2 is a
  string that the setup program uses P1 to decode into an executable
  ASC\-> - then P1 is discarded.  The second version is more compact
  than the first, and also uneditable and therefore safer (but it can't
  be transmitted in ASCII form, which helps to make the point of this
  exercise).

  Here are the programs, contained in a directory:

  %%HP: T(3)A(D)F(.);
  DIR
  P1              @ ASC\-> Version 1.
  \<<
    IF DUP TYPE 2 \=/
    THEN "Not A String" DOERR
    END RCWS \-> ws
    \<< 16 STWS
      #0 NEWOB SWAP DUP SIZE
      IF DUP 4 <
      THEN DROP SWAP DROP "Invalid String" DOERR
      END
      DUP 65 / IP - 4 - # 18CEAh SYSEVAL
      "" OVER # 61C1Ch SYSEVAL
      SWAP # 6641F8000AF02DCCh
      # 130480679BF8CC0h # 518Ah SYSEVAL
      # 19610313418D7EA4h # 518Ah SYSEVAL
      # 7134147114103123h # 518Ah SYSEVAL
      # 5F6A971131607414h # 518Ah SYSEVAL
      # 12EA1717EA3F130Ch # 518Ah SYSEVAL
      # 280826B3012808F4h # 518Ah SYSEVAL
      # 6B7028080BEE9091h # 518Ah SYSEVAL
      # BE5DC1710610C512h # 518Ah SYSEVAL
      # 705D00003431A078h # 518Ah SYSEVAL
      # 3D8FA26058961431h # 518Ah SYSEVAL
      # 312B0514h # 518Ah SYSEVAL
      # 18F23h SYSEVAL
      DUP BYTES DROP 4 ROLL
      IF ==
      THEN SWAP DROP
      ELSE DROP "Invalid String" DOERR
      END ws STWS
    \>>
  \>>

  P2      @ ASC\->  Version 2.  To be converted by ASC\-> version 1.

  "D9D20D29512BF81D0040D9D20E4A209000000007566074726636508813011920
  140007FE30B9F060ED3071040CA1304EC3039916D9D2085230B9F06C2A201200
  094E66716C696460235472796E676933A1B21300ED30FD5502C230C1C1632230
  CCD20FA0008F14660CC8FB97608403104AE7D814313016913213014117414317
  414706131179A6F5C031F3AE7171AE214F8082103B6280821909EEB0808207B6
  215C0160171CD5EB870A13430000D50713416985062AF8D341508813044950B9
  F06BBF06EFC36B9F0644230C2A201200094E66716C696460235472796E676933
  A1B2130B21300373"

  P3      @\->ASC.     To be converted by ASC\->.
  "D9D20D2951881304495032230FD5502C230A752688130ADB467FE30322306AC3
  0CB916E0E30CBD30F6E30C1C1632230CCD20DC0008F14660CC8FB97608403104
  AE7D8143130169174147061741431311534AC6B4415141534946908D9B026155
  4A6F53131F3AE731A014C161AE215F08082103A6280821939EEC08082170A621
  4C161170CD56B870A18503430000D5071351796A9F8D2D02639916D9D2085230
  C2A209100025F4D402F426A6563647933A1B2130A2116B213033C0"

  SETUP   @Automatic setup program
  \<< P2 P1 'ASC\->' STO
      P3 ASC\-> '\->ASC' STO
      { P1 P2 P3 SETUP } PURGE
  \>>

  END

  Installation instructions:

  1. Edit the above text between (start) and (end) into a text file
     named CONV (for example).  Be sure that you leave the strings
     exactly as entered above, with no extra spaces or other invisible
     characters at the beginnings or ends of the lines.

  2. Set the HP48 SX into ASCII transfer mode.

  3. Using Kermit, download CONV text file to the 48, verify its
     checksum (6C8Ah).

  4. Execute CONV to make it the current directory.

  5. Execute SETUP.

  6. The directory CONV now contains ASC\-> and \->ASC, ready to use.

  To archive the decoded versions of ASC\-> and \->ASC back on your
  computer, be sure to set the HP48 SX in binary transfer mode before
  uploading.

  Disclaimers:

  o  Use the programs at your own risk.  Any time you delve into the
     SYSEVAL world, there are increased dangers.  Archive your 48 memory
     before experimenting with these programs!  Also, verify the
     checksums of objects defined above to make sure they have been
     downloaded correctly, before executing ASC\->.

  o  I will not answer questions about how the programs work.  This is
     not because of any great secrecy, but rather because it's hard to
     give any answer that doesn't lead to more questions, and more, and
     more...

  o  48 hackers are welcome to mine any nuggets they can from the
     programs, and from the fact that \->ASC is a convenient way to
     decompile an object.

  8.2.  OBJFIX

  When a binary object received by Kermit on the HP-48 is left as a
  string beginning with HPHP48, OBJFIX will extract the HP-48 object if
  the only problem is that extra bytes got appended to the end.

  OBJFIX takes a variable name in stack level 1 and modifies the
  contents of the variable if no other problems are detected.

  Note: This is like FIXIT by Horn and Heiskanen on Goodies Disk 8, but
  this one is by HP and so I suppose it's more reliable.  Although it
  fails the test cases included with FIXIT, that may be because they
  were artificially contrived cases.  Try both on real-world downloads
  that need fixing.  Which do you like better?

  OBJFIX.ASC

       %%HP: T(3)A(D)F(.);
       "D9D202BA81D9F81B2040D9D20F2A26DA91629C8145126489162C23072C80CCD2
       0BD0008FB9760147108134164142C2818F24D534501008B2F41643150D73B840
       58405438314A161966D2BF6BF6A6F5BE16314213114334CF8208A6F58F235A04
       55136D7D4EA494D231A1CA101110131CA130DBE284F8FC0760D41198F29960D4
       130142119EA1408F5E0108D341503223072D70B2130B21301460"

  8.3.  FIXIT

  From: Joe Horn and Mika Heiskanen

     PURPOSE:
        Converts a badly uploaded string into the original object.

     THEORY:
        A lot of folks upload HP48 objects poorly, such that when you
        download them, you just get strings full of garbage that look
        something like this:

          "HPHP48-E#c&r$a%p@!*!..."     [looks familiar, eh?]

     That's because they uploaded it using XMODEM, or managed to screw
     it up some other way.  The following FIXIT program takes such a
     string and extracts the actual HP48 object that they originally
     intended to upload (if at all possible).

     Such object extraction can be done by hand, but it's too dangerous.
     FIXIT minimizes the danger of Memory Clear.  It checks whether the
     extracted object is a valid one, and if not, drops it from the
     stack before the HP48 attempts to display it.  All of the many bad
     downloads I've archived over the years are fixed by FIXIT, whereas
     about half of them cause a Memory Clear when extracted manually.
     No guarantees, however.  Use at your own risk.

     The actual extraction is done by a "Code object" written by Mika
     Heiskanen.  The User RPL "shell" around this code object is what
     minimizes the danger of Memory Clear; it was written by Joe Horn.

     INSTRUCTIONS:
        BACKUP YOUR MEMORY, just in case the string contains a logic
        bomb.

        Place the bad download on the stack (see "HPHP48-...") and run
        FIXIT.

        Possible results:

     o  No error: the object was extracted successfully and is on level
        1.

     o  "Bad Argument Type" error: you didn't have a string on level 1.

     o  "Bad Argument Value" error: the string wasn't of the proper
        form; it must be an "HPHP48-..." downloaded string.

     o  "Invalid Definition" error: the object was mangled in
        transmission so badly that its end was lost; the object cannot
        be extracted.

     o  "Undefined Result" error: there is no HP48 object in the string.

     o  "Recover Memory? YES/NO": the string contained a bomb, and FIXIT
        detonated it.  Press YES to sift through the shrapnel and rubble
        in a feeble attempt to resurrect the dead.  Press NO to bury
        them.

     EXAMPLES:
        To do the following examples, download the FIXIT directory to
        your HP48 and get into it.

     o  Press HI.  See "HPHP48-E...", a badly uploaded download.  Before
        pressing FIXIT to fix it, try doing what we all used to do:
        press EDIT to see if we can recognize anything (usually a futile
        attempt).  We see:

        "HPHP48-E...  << Melancholy Baby >>"

        But looks can be deceiving; press ON to exit the editor, and
        then press FIXIT to extract the intended upload:

        << Happy Camper >>

     o  Press WTAV; see another garbage download.  But EDIT refuses; the
        string contains null characters.  Press FIXIT; see successfully
        extracted directory.

     o  Press BAD1.  Notice that it looks exactly like WTAV.  (Press
        WTAV, compare, then DROP).  But its ending is all messed up;
        manually extracting WTAV from BAD1 can cause Memory Clear.
        Press FIXIT and see "Error: Invalid Definition" indicating that
        the object inside BAD1 is so mangled that its end cannot be
        located.

     o  Press BAD2.  Looks like WTAV again.  But its body is messed up;
        manually extracting it would create an External object that
        could cause Memory Clear if evaluated.  Press FIXIT and see
        "Error: Undefined Result" indicating that there is nothing
        recognizable inside BAD2.

  FIXIT.ASC

       %%HP: T(3)A(D)F(.);
       "69A20FF7CE20000000402414442340C2A203B000840584054383D25403A20FF7
       2500000000403535947440D9D20E16329C2A2DBBF13013216DF1406A1C42328D
       BF193632B213034000407545146540D9D20E163292CF1EFFB1DBBF1EBFB150FA
       193632B2130003030303034C000402414441340C2A203B000840584054383D25
       469A20FF72500000000403535947440D9D20E16329C2A2DBBF13013216DF1406
       A1C42328DBF193632B213034000407545146540D9D20E163292CF1EFFB1DBBF1
       EBFB150FA193632B2131313131313134C000407545146540C2A203B000840584
       054383D25469A20FF72500000000403535947440D9D20E16329C2A2DBBF13013
       216DF1406A1C42328DBF193632B213034000407545146540D9D20E163292CF1E
       FFB1DBBF1EBFB150FA193632B2130003030303034C00020849420C2A20570008
       40584054383D254D9D20E163284E2050841607079784E20603416D6075627936
       32B2130A0BA02D456C616E63686F6C697022416269702BB28000506494859445
       50D9D20E16323CE2278BF168BC1ED2A2167E1AFE22D9D203CE2278BF19C2A274
       3A2C58C1C2A2031000840584054383D2167E1AFE22D9D2078BF18B9C1DBBF1AA
       F028DBF1CCD201200014713717917F137145142164808C5BF22D9D2033920200
       0000000005150933A1B21305DF22B21305BF22D9D20339202000000000004150
       933A1B21305DF223CE2278BF168BC1D8DC1167E1AFE22D9D203FBF1339202000
       000000002770933A1B21305DF223CE2278BF19D1A1DBBF18DBF1E0CF1D5CE1AF
       E22D9D208DBF1339202000000000000030933A1B21305DF22CB2A193632B2130
       B21303D4F"

  8.4.  LASTX

  The LASTX function is useful in calculations where a number occurs
  more than once.  By recovering a number using LASTX, you do not have
  to key that number into the calculator again.  Note however that LASTX
  uses the built in last argument feature, so if you use LASTX you will
  lose the contents of your LASTARG.

  For example, calculate:

        96.704 + 52.394706
       --------------------
             52.394706

       Keystrokes:                     Stack:
       -----------------              --------------------
       96.704 ENTER                    96.704

       52.304706 +                     149.098706

       LASTX                           149.098706
                                       52.304706

       /                               2.84568265351

       @ This is a version of LASTX for the HP48
       @
       %%HP: T(3)A(D)F(.);
       \<< DEPTH \-> n
         \<< LASTARG DEPTH n
       - DUP \-> s
           \<< ROLLD s 1 -
       DROPN
           \>>
         \>>
       \>>

  8.5.  Compact Data Storage

  From: Jim Donnelly

  A simple length-encoding technique can be put to use for a free-
  format, very compact multi-field data storage system.  Two tiny
  programs, SUBNUM and STRCON are here to help the process, and are
  listed near the end of this note.  At the end of the note is a
  directory that may be downloaded into the HP48 that contains the
  examples.

  The principle is to store starting indices in the beginning of a
  string that point to fields stored subsequently in the string.  The
  indices are stored in field order, with an additional index at the end
  to accommodate the last field.  There are several small points worth
  mentioning:

  o  Fields may be 0-length using this technique.

  o  The execution time is uniform across all fields.

  o  This technique saves about 4 bytes per field after the first field,
     because the string prologue and length are omitted for fields 2 ->
     n.

     EXAMPLE:

                    Indices  |          Fields
     Character               |     1 11111111 12222222222
     Position :   1  2  3  4 |567890 12345678 90123456789
                 +--+--+--+--+------+--------+-----------+
     String :    | 5|11|19|30|Field1| Field2 |  Field 3  |
                 +--+--+--+--+------+--------+-----------+

     This is a string that contains 3 fields, and therefore 4 index
     entries.  The first field begins at character 5, the second field
     begins at character 11, and the third field begins at character 19.
     To keep the pattern consistent, notice that the index for field 4
     is 30, which is one more than the length of the 29 character data
     string.

     To extract the second field, place the string on the stack, use
     SUBNUM on character 2 to extract the starting position, use SUBNUM
     on character 3 to extract the (ending position +1), subtract 1 from
     the (ending position+1), then do a SUB to get the field data.
     NOTE: The index for field 1 is stored as char. data 5, NOT the
     string "5"!  To place the field index for field 1 in the string,
     you would execute "data" 1 5 CHR REPL.

     PROGRAM:
        The following program accepts an encoded data string in level 2
        and a field number in level 1:

          DECODE   "data"  field#  -->  "field"

          <<  --> f
            <<
              DUP f SUBNUM                ; "data" start -->
              OVER f 1 + SUBNUM           ; "data" start end+1 -->
              1 -                         ; "data" start end -->
              SUB                         ; "field" -->
            >>
          >>

     DATA ENCODING:
        The following program expects a series of 'n' strings on the
        stack and encodes them into a data string suitable for reading
        by the first example above.

        The programs SUBNUM and STRCON are used to assemble the indices.

     ENCODE      field n  ...  field 1   n   -->  "data"

     << DUP 2 + DUP 1 - STRCON --> n  data
       <<
         1 n
         FOR i
           data i SUBNUM OVER SIZE   ; ... field index fieldsize
           + data SWAP               ; ... field "data" index'
           i 1 + i + SWAP CHR REPL   ; ... field "data"'
           SWAP + 'data' STO         ; ...
         NEXT
         data                        ; "data"
       >>
     >>

     In this example, four strings are encoded:

          Input:  5: "String"
                  4: "Str"
                  3: "STR"
                  2: "STRING"
                  1:         4

     Output: "xxxxxSTRINGSTRStrString"      (23 character string) (The
     first five characters have codes 6, 12, 15, 18, and 24)

     VARIATION:
        The technique above has a practical limit of storing up to 254
        characters of data in a string.  To overcome this, just allocate
        two bytes for each field position.  The code to extract the
        starting index for becomes a little more busy.  In this case,
        the index is stored as two characters in hex.

                         Indices  |          Fields
          Character               | 11111 11111222 22222223333
          Position :   12 34 56 78|901234 56789012 34567890123
                      +--+--+--+--+------+--------+-----------+
          String :    |09|0F|17|21|Field1| Field2 |  Field 3  |
                      +--+--+--+--+------+--------+-----------+

          <<  --> f
            <<
               DUP f 2 * 1 -           ; "data" "data" indx1 -->
               SUBNUM 16 *             ; "data" 16*start_left_byte  -->
               OVER f 2 * SUBNUM +     ; "data" start
               OVER f 2 * 1 + SUBNUM   ; "data" start end_left_byte -->
               16 * 3PICK f 1 + 2 *
               SUBNUM + 1 -            ; "data" start end -->
               SUB                     ; "field"  -->
            >>
          >>

     TWO VERY TINY HELPFUL PROGRAMS:

          SUBNUM          "string"  position  -->  code

          << DUP SUB NUM >>

          STRCON          code  count  -->  "repeated string"

          << -->  code count
            << "" code CHR 'code' STO
               1 count START code + NEXT
            >>
          >>

     Alternative Solution to the Problem:
        From: Matjaz Vencelj <vencelj@fmf.uni-lj.si>

        Jim allocates two bytes for each index entry (to handle longer
        strings), but on the other side obviously only uses values
        00...FF for index dublets, which just doesn't make sense.  He's
        at a 16*16 = 255 chars limit again!

        I have put together a working set of commands which support up
        to 65K strings, using two-byte indexing.

        The encoder (Encode) is User-RPL program which calls the binary
        N2C which converts the level 1 real into a 2 character string:

          @*** Encode ***
          %%HP: T(3)A(R)F(.);
          \<<
            IF DUP TYPE 0 = THEN 514 DOERR END
            \-> N
              \<<
              N 1 + 2 * #18CEAh SYSEVAL #45676h SYSEVAL
              1 N FOR I I 2 * 1 - OVER SIZE 1 + N2C REPL SWAP + NEXT
              N 2 * 1 + OVER SIZE 1 + N2C REPL
              \>>
          \>>

          @*** N2C, cksum=#8919h ***
          %%HP: T(3)A(R)F(.);
          "D9D202BA812BF819FF30D9D20AEC8111920001007FE3057A50C57463223057A5
          0EE250B2130B21307206"

     ASCII download them with translate code 3, then call program
     'Encode' with data strings in levels 2..n+1 and a real n in level 1
     indicating the number of strings.

     The string decoder (Decode), which is usually speed-critical, is
     the following \->ASC encoded binary:

          @*** Decode, cksum=#38E1h ***
          %%HP: T(3)A(R)F(.);
          "D9D20D8A81D9F811192013000D9D20AEC8113D26CA130F6E30CA130E0E305080
          311920001002CE30CAF0650803CBD30CAF06FED30F6E30CA130E0E3050803119
          20001002CE30CAF0650803CBD30E0E3033750B2130B21309534"

     It takes a `database' string on level 2 and a real (record
     position) on level 1, then comes back with the appropriate
     substring (record).

  9.  Appendix B: GX Specific Information

  9.1.  What's new in the HP48 G/GX?

  From: Joe Horn

     AUTOMATIC LIST PROCESSING
        Almost all commands that did not accept list(s) as their
        arguments can do so now.  Here are just a few examples:

          { 1 2 3 } SF sets flags 1, 2, and 3
          { 1 2 3 } SQ  -->  { 1 4 9 }
          { 2 4 } 10 /  -->  { .2 .4 }
          10 { 2 4 } /  -->  { 5 2.5 }
          { 10 12 } { 2 4 } /  -->  { 5 3 }
          { .1 .2 .5 } ->Q  -->  { '1/10' '1/5' '1/2' }
          { freq freq ...} { dur dur ... } BEEP can play a song with no
            audible hiccup between tones.

     Since + has always been used to concatenate lists, a new ADD func-
     tion exists to add the elements of two lists, like this:

          { 1 2 3 } { 4 5 6 } ADD returns { 5 7 9 }, whereas
          { 1 2 3 } { 4 5 6 }  +  returns { 1 2 3 4 5 6 } as it did
            before.

     The only commands which do not have automatic list processing are:

     o  those which never get a Bad Argument Type error (like DUP),

     o  meta-object commands (like ROLL),

     o  program branch structures (like FOR), and

     o  commands that specifically work on lists (like GET).

        Sometimes the results are non-obvious, for example:

          5  { A B C }  STO           -->  A=5, B=5, C=5
          { 5 6 7 }  'A'  STO         -->  A={ 5 6 7 }  (same as on SX)
          { 5 6 7 }  { A B C }  STO   -->  A=5, B=6, C=7

     List processing is only recursive for ->Q and ->Qpi.

     PORTS AND MEMORY
        The HP48 G, like the 48 S, only has 32K RAM.  The GX, unlike the
        SX, has 128K RAM built-in.  Card slot 1 can contain another 128K
        (maximum), but card slot 2 can contain up to 4 megabytes of RAM.

        Only port 1 can be merged in the GX.  Card slot 2, which is
        intended for large-capacity RAM cards, is permanently "free",
        and is automatically divided up into 128K "ports", each of which
        becomes Port 2, Port 3, Port 4, etc.  Up to 4 Megabytes can be
        plugged into slot 2, which would then become Port 2 through Port
        33. (Although the FREE and MERGE commands were kept for HP48 SX
        compatibility, GX users will prefer the new FREE1 and MERGE1
        commands).  Therefore the maximum amount of merged main memory
        is 256K (unlike the SX which allowed up to 288K) after MERGE1;
        the maximum amount of fully online free independent memory is
        4224K after FREE1.

     LOCAL VARIABLES
        Variable names prefixed with a <- (backarrow character) are
        compiled as local (temporary) variable name objects even if
        they're not explicitly after FOR or ->.  This allows programs to
        share values through local variables, which is much faster than
        sharing values through global variables, and they get purged
        automatically.

     SPEED
        CPU clock speed is double the S/SX's, but throughput is
        estimated to be only 40% faster, primarily due to the fact that
        all RAM & ROM is now bankswitched (on the S/SX only a 32K
        portion of the ROM required bank switching), and it still has
        the same 4-bit bus bottleneck.

     IMPROVED COMMANDS:

     o  AXES can now also specify the spacing of the tick marks.

     o  DEPND can now also specify the initial values and tolerance for
        the new DIFFEQ plot type.

     o  REPL and SUB now work on arrays.

     HP SOLVE EQUATION LIBRARY CARD COMMANDS:

     o  AMORT, amortization calculations

     o  CONLIB, starts Constants Library catalog

     o  CONST, returns value of a named CONLIB constant

     o  DARCY, calculates Darcy friction factor

     o  EQNLIB, starts Equation Library catalog

     o  F0lambda, calculates black-body power fraction

     o  FANNING, calculates Fanning friction factor

     o  LIBEVAL is a generalized form of the EQ card's ELSYSEVAL; it
        executes any XLIB by its library number

     o  MCALC, marks an MSOLVR variable as "not user-defined"

     o  MINEHUNT, starts the "Minehunt" video game

     o  MINIT, initializes Mpar from 'EQ' for MSOLVR

     o  MITM, customizes title & menu of MSOLVR's screen

     o  MROOT, solve for variable(s) in MSOLVR

     o  MSOLVR, shows Multiple Equation Solver menu

     o  MUSER, marks an MSOLVR variable as "user-defined"

     o  SIDENS, density of silicon as function of temperature

     o  SOLVEQN, starts solver for specified EqLib equation(s)

     o  TDELTA, subtracts temperatures like "-" ought to but doesn't

     o  TINC, adds temperatures like "+" ought to but doesn't

     o  TVM, shows the financial calculator (Time Value of Money) menu

     o  TVMBEG, sets payments-at-beginning-of-periods mode

     o  TVMEND, sets payments-at-end-of-periods mode

     o  TVMROOT, solves for a TVM variable

     o  ZFACTOR, calculates gas compressibility factor Z

        Note: The EQ Card's Periodic Table and Tetris game are not in
        the HP48 G/GX, but the EQ Card can be used in the GX if those
        applications are needed. Tetris was not included because no
        agreement on royalty was reached.  The Periodic Table is
        available separately as freeware on HPCVBBS.

     NEW ARRAY COMMANDS:

     o  COL+, inserts a column vector into a matrix or a number into a
        vector (like INSCOL/PUTCOL in Donnelly's Tool Library)

     o  COL-, deletes a column from a matrix or number from a vector
        (identical to DELCOL in Donnelly's Tool Library)

     o  COL->, combines multiple column vectors into a matrix

     o  ->COL, breaks a matrix into multiple column vectors (like
        repeated GETCOL in Donnelly's Tool Library)

     o  COND, column norm condition number of a square matrix

     o  CSWP, swaps two columns in a matrix (like EXCOL in Donnelly's
        Tool Library)

     o  ->DIAG, returns vector of major diagonal elements of a matrix

     o  DIAG->, creates matrix with specified diagonal elements

     o  EGV, eigenvalues and right eigenvectors of a square matrix

     o  EGVL, eigenvalues of a square matrix

     o  FFT, discrete Fourier transform

     o  IFFT, inverse discrete Fourier transform

     o  LQ, returns the LQ factorization of a matrix

     o  LSQ, minimum norm least-squares solution to an ill-determined
        system of linear equations

     o  LU, returns the Crout LU decomposition of a square matrix

     o  PCOEF, returns polynomial with given roots (inverse of PROOT)

     o  PEVAL, evaluates polynomial at x

     o  PROOT, finds all roots of polynomial (inverse of PCOEF)

     o  QR, returns QR factorization of a matrix

     o  RANK, rank of a rectangular matrix (uses flag -54)

     o  RANM, creates matrix with random elements

     o  RCI, multiplies elements in one row of a matrix by a scalar

     o  RCIJ, does RCI then adds the result to a row

     o  ROW+, inserts a row vector into a matrix or a number into a
        vector (like INSROW/PUTROW in Donnelly's Tool Library)

     o  ROW-, deletes a row from a matrix or number from a vector
        (identical to DELROW in Donnelly's Tool Library)

     o  ROW->, combines multiple row vectors into a matrix

     o  ->ROW, breaks a matrix into multiple row vectors (like repeated
        GETROW in Donnelly's Tool Library)

     o  RSWP, swaps two rows in a matrix (identical to EXROW in
        Donnelly's Tool Library)

     o  SCHUR, computes the Schur decomposition of a square matrix

     o  SNRM, spectral norm of an array

     o  SRAD, spectral radius of a square matrix

     o  SVD, singular value decomposition of a matrix

     o  SVL, computes the singular values of a matrix

     o  TRACE, sum of diagonal elements of a square matrix

     GRAPHICS and PLOTTING COMMANDS:

     o  ANIMATE, displays grobs on the stack sequentially.  You can use
        the defaults, or specify your own delay between frames (can be
        very fast), the number of times to repeat the sequence, and even
        the pixel coordinates.  It's just like a ROLL REPL loop...
        except very fast.  Note: Charlie Patton converted 17 seconds of
        the Apollo moon-walk video into HP48 GROBs and ran them with
        ANIMATE, and it looked very good!

     o  ATICK, specifies tick spacing on plot axes

     o  EYEPT, specifies the eye-point coordinates in a perspective plot

     o  GRIDMAP, selects the new "gridmap" plot type

     o  PARSURFACE, selects the new "parametric surface" plot type

     o  PCONTOUR, selects the new "pcontour" plot type

     o  PICTURE, same as GRAPH command

     o  SLOPEFIELD, selects the new "slopefield" plot type

     o  WIREFRAME, selects the new "wireframe" plot type

     o  XVOL, sets the width of the 3D plotting volume

     o  XXRNG, sets the width of the 3D target mapping range for gridmap
        and parametric surface plots

     o  YSLICE, selects the new "yslice" plot type

     o  YVOL, sets the depth of the 3D plotting volume

     o  YYRNG, sets the depth of the 3D target mapping range for gridmap
        and parametric surface plots

     o  ZVOL, sets the height of the 3D plotting volume

     USER-INTERFACE COMMANDS:

     o  CHOOSE, displays a point-and-click menu "dialog box"

     o  INFORM, formatted multi-line input with named fields (nice!!)

     o  MSGBOX, displays text in a centred box with shadow, then WAITs

     o  NOVAL, placeholder for unspecified values in INFORM argument
        list

     LIST PROCESSING COMMANDS:

     o  ADD, adds lists element-wise (see section above)

     o  DOLIST, evals an object on multiple lists

     o  DOSUBS, evals a program or command taking arguments from a list

     o  ENDSUBS, returns the number of loops the current DOSUBS will do

     o  HEAD, first element in a list or first char in a string
        (identical to CAR in Donnelly's Tool Library)

     o  DeltaLIST, list of first finite differences of list objects

     o  SigmaLIST, sum of the elements in a list

     o  PiLIST, product of the elements in a list

     o  NSUB, returns the current list pointer value during a DOSUBS

     o  REVLIST, reverses the order of the objects in a list (like
        REVERSE in Donnelly's Tool Library)

     o  SEQ, list of results from repeated execution of an object (like
        a FOR/STEP loop but the results go into a list)

     o  SORT, sorts elements in a list into ascending order, or sorts a
        list of lists using each list's first element as the key (can be
        done with LSORT/QSORT in Donnelly's Tool Library)

     o  STREAM, executes an object on first two elements of a list, then
        again on the result and the 3rd element, etc.  Allows easy
        creation of things similar to SigmaLIST and PiList.

     o  TAIL, returns a decapitated list or string (see HEAD above)
        (identical to CDR in Donnelly's Tool Library)

     SYSTEM COMMANDS:

     o  CLTEACH, clears the 'EXAMPLES' directory created by TEACH

     o  CYLIN, sets polar/cylindrical coordinate mode

     o  FREE1, like 1 FREE (see section above)

     o  MERGE1, like 1 MERGE (see section above)

     o  PINIT, port initialize, esp. important for 4-Meg RAM card users

     o  RECT, sets rectangular coordinate mode

     o  SPHERE, sets polar/spherical coordinate mode

     o  TEACH, loads the Owner's Manual examples into a dir in HOME

     o  VERSION, returns the operating system ROM version string and a
        copyright notice, like this:

          2: "Version HP48-R"      <-- means version "R"
          1: "Copyright HP 1993"

     o  XRECV, X-Modem protocol receive (binary mode only)

     o  XSEND, X-Modem protocol send (binary mode only)

     MATH COMMANDS:

     o  LININ, tests whether an equation is linear in a given variable

     o  NDIST, normal probability density

     o  PCOV, population covariance of SigmaDAT

     o  PSDEV, population standard deviation of SigmaDAT

     o  PVAR, population variance of SigmaDAT

     o  RKF, solves initial value problem using Runge-Kutta-Fehlberg

     o  RKFERR, change in solution and absolute error using RKF

     o  RKFSTEP, next solution step with given error tolerance using RKF

     o  RRK, solves initial value problem using Rosenbrock & RKF

     o  RRKSTEP, next solution step with given error tolerance using RRK

     o  RSBERR, change in solution and absolute error using Rosenbrock

     MENU NUMBERS and KEY CODES
        Many menu numbers have changed, so software that uses # MENU or
        # TMENU may not work the same as in the HP48 S/SX.
        (Specifically, only menu numbers 0-3, 28, 30, and 42-59 are the
        same). Likewise, almost all of the shifted keycodes correspond
        to new commands and menus, which programmers must take into
        account; for example, the "RAD" key on the S/SX had the keycode
        82.2, but it's 21.2 on the G/GX.  The left-shift key, which was
        orange on the S/SX, is now purple officially "lavender", and the
        right-shift key which was blue on the S/SX is now green
        officially "teal" on the G/GX.  Also, the digit-key menus can be
        activated by both shift keys; left-shift gives the softkey menus
        like in the S/SX, but the right-shift gives the new user-
        friendly full-screen menus.  The unshifted keys remain identical
        to the S/SX, except for a cosmetic colour change to match the
        very dark green of the calculator case.

     MANUALS
        The G/GX comes with two manuals, a "Quick Start Guide" for
        beginners, and a cost-cutting, slimmer owner's manual called the
        "User's Guide" which has only 21 pages about programming, since
        HP figures that the huge majority of all 48 owners never program
        it anyway.  The power users can buy the optional "Advanced Users
        Reference Manual" (similar to the S/SX's "Programmer's Reference
        Manual") which covers programming and the many commands that are
        not mentioned in the User's Guide.  There is no "Quick Reference
        Guide" like the S/SX came with, although the case still has a
        pocket for one.  Jim Donnelly has marketed a nice pocket guide,
        but it's too wide to fit in the case's pocket.  The User's Guide
        is not spiral bound, but is made to open fully and last a long
        time, since it's not just glued but has sewn signatures like
        real books, and is printed on quality paper.

     FLAGS
        Some previously "unused" flags are now used.  They are:

          -14 Clear = end-of-period payment mode (for TVM calculations)
              Set   = beginning-of-period payment mode

          -27 Clear = display symbolic complex numbers in coordinate form
                      e.g. '(X,Y)'
              Set   = display symbolic complex numbers using 'i'
                      e.g. 'X+Y*i'

          -28 Clear = plot multiple equations like the S/SX does (serially)
              Set   = plot multiple equations simultaneously

          -29 Clear = include axes in plots (like the S/SX does)
              Set   = omit axes from 2D and statistics plots

          -30 is no longer used (it never did anything useful anyhow)

          -54 Clear = tiny matrix elements get rounded to zero
              Set   = leaves matrix elements alone

     The default setting of all these flags is Clear (as in the S/SX).

     FLAG BROWSER
        There is a System Flag browser which shows the flag number,
        shows whether it's set or clear, lets you toggle it, and shows
        in English what the current setting means.

     CHARACTER BROWSER
        While programming, if you want to type any character at all,
        press CHARS and a screenful of ASCII characters is displayed
        that you can browse with the arrow keys, and not only does the
        screen also show the ASCII code (NUM value) and even the
        shortcut keyboard key sequence (if any) for each character, but
        if you press ECHO, it will be "typed" into your program.
        There's no need any more for the alpha keyboard table.

     DIRECTORY MAINTENANCE
        Press right-shift VAR to launch a Variable Browser which is a
        complete memory manager.  You can tag multiple objects and copy,
        move, or delete them all with a single keystroke; there's even a
        Mark All and an Unmark All, like a real computer.  It's slow,
        however, and has been obsoleted by the very fast PCT library.

     FRACTIONAL UNIT POWERS
        The S/SX only handled integer powers of units correctly, but the
        G/GX can use any real number as a unit power.

     NAME PLATE
        The case has a rectangular indentation in the back like the HP
        95LX and 100LX, and it comes with an adhesive metal nameplate
        that you can get engraved with your name.  ($5 at EduCalc if
        ordered at time of purchase).

     XLIB NAMES
        All of the new commands in the GX are XLIB names, and therefore
        take 5.5 bytes in programs.  The commands common to the SX and
        GX take 2.5 bytes each, as they did in the SX.

     INPUT FORMS and CHOOSE BOXES
        Many operations have two menu types: the old SX style, and a new
        "drop-down" menu and "input forms" that have the feel of
        computer dialog boxes.  Especially useful for the HP48 beginner.

     ENHANCED PRECISION
        The internal precision of at least some of the matrix routines
        has been improved; INV gets better answers on square matrices
        than the SX did.  HP has not released information about which
        routines were improved, how, and by how much.

     IMPROVED DISPLAY
        The LCD introduced with revision M of the G/GX is easier to read
        since it has higher contrast between on/off pixels.  It has a
        slower cycle response time, however, making it difficult to use
        for rapid-motion video games or any other rapid animation.

  9.2.  Examples of INFORM, CHOOSE, and MSGBOX

  From: Jarno Peschier

  Some examples of INFORM, CHOOSE and MSGBOX on the HP48 GX. Just
  download the entire directory to your calculator and try the programs,
  change them, modify them and do everything else with them you can
  think of.

     SIMPLE:
        This program will demonstrate a simple INFORM input screen with
        3 fields (one without type restrictions, one for real or complex
        numbers and one for strings) with some additional layout. MSGBOX
        and CHOOSE (with the third parameter equal 0) are used to show
        what the results of the INFORM command are. The list the INFORM
        command returns is left on stack so you can see what it looks
        like.

     ANGLE:
        This program will demonstrate the use of CHOOSE. It lets you
        choose between the three possible angle modes (DEG, RAD, GRAD)
        and when you choose one of them, the corresponding mode is set
        by evaluating a tiny program containing the right command.

     ISOLATE:
        This program will demonstrate the use of INFORM in ways that it
        is used in the calculator itself. It is a very simple shell
        around the ISOL command (isolation of a variable from an
        algebraic). It remembers it's settings in a variable called IPAR
        and the next time the program is run this will be the default
        values of the INFORM command, so you can isolate for a different
        variable using the same algebraic you used before, without
        retyping it. MSGBOX is used for error messages.

     TYPELIST:
        This program will again demonstrate the use of CHOOSE. It
        extracts the names of all the internal types of the HP48 GX from
        ROM and shows them in a CHOOSE-box (alphabetically sorted by
        name). If you choose one of them, its TYPE number is shown in a
        MSGBOX.

     MATHQUIZ:
        This final program will demonstrate the use of INFORM with
        variable field descriptions and default/reset values. It's will
        show you 8 fields that are simple math questions for you to
        solve (addition and subtraction).  You can enter all the results
        and then you will see if your answers were correct (in a
        MSGBOX). You must fill all the fields. Hint: you can cheat by
        resetting a field (or all fields).

     %%HP: T(3)A(D)F(.);
     DIR
       SIMPLE
         \<<
           IF
     "AN EXAMPLE OF INFORM"
     { { } { } { } {
     "OBJECT:"
     "ALL OBJECTS ARE ALLOWED HERE"
     } { } { "NUM:"
     "ENTER A (COMPLEX) NUMBER"
     0 1 } { "NAME:"
     "ENTER YOUR FULL NAME"
     2 } { } { } } { 3 1
     } {
             \<< 440 1
     BEEP
             \>> (0,1)
     "JARNO PESCHIER" }
     { NOVAL 0 "N.N." }
     INFORM
           THEN DUP
     "YOU ENTERED:" SWAP
     0 CHOOSE DROP
     "The list that INFORM produced is still on the stack."
           ELSE
     "You cancelled the INFORM."
           END MSGBOX
         \>>
       ANGLE
         \<<
           IF
     "ANGLE MEASURE" { {
     "Degrees" DEG } {
     "Radians" RAD } {
     "Grads" GRAD } } 1
     CHOOSE
           THEN EVAL
           END
         \>>
       ISOLATE
         \<<
           IF
     "A VERY SIMPLE VARIABLE ISOLATOR"
     { { } { "EXPR:"
     "ENTER THE EXPRESSION"
     9 } { "VARIABLE:"
     "ENTER VARIABLE TO ISOLATE"
     6 } } { } { }
             IF 'IPAR'
     VTYPE 5 \=/
             THEN { }
             ELSE 'IPAR'
     RCL
             END INFORM
           THEN DUP 'IPAR' STO
             IF DUP
     NOVAL POS
             THEN DROP
     "You must enter an expression and a variable!"
     MSGBOX
             ELSE OBJ\->
     DROP
               IFERR
     ISOL
               THEN
     DROP2 "Error: "
     ERRM + MSGBOX
               END
             END
           END
         \>>
       TYPELIST
         \<<
           IF
     "ALL HP48 TYPES (IN ROM)"
     0 27
             FOR msg
               IFERR msg
     263 + DOERR
               THEN ERRM
               END msg 2
     \->LIST
             NEXT 28
     \->LIST SORT 1 CHOOSE
           THEN
     "That one has type number "
     SWAP + "." + MSGBOX
           END
         \>>
       MATHQUIZ
         \<<
           IF
     "A SIMPLE MATH QUIZ"
     1 8
             FOR i "'"
     RAND 100 * IP +
               IF RAND
     0.75 <
               THEN "+"
               ELSE "-"
               END +
     RAND 100 * IP + "'"
     + "ENTER RESULT #"
     i + 0 3 \->LIST
             NEXT 8
     \->LIST DUP
             \<< \-> X
               \<< X HEAD
     2 OVER SIZE 1 - SUB
     "=" + X 1 ROT PUT
               \>>
             \>> DOLIST
     SWAP
             \<< \-> X
               \<< X HEAD
     OBJ\-> EVAL
               \>>
             \>> DOLIST 3
     ROLLD { 2 5 } 4
     PICK { } INFORM
           THEN
             IF DUP
     NOVAL POS
             THEN DROP2
     "You didn't fill all the blanks."
             ELSE
               IF SAME
               THEN
     "All answers were correct!"
               ELSE
     "Not all answers were correct."
               END
             END MSGBOX
           ELSE DROP
           END
         \>>
     END

  9.3.  Some useful LIBEVALs

  From: Joe Horn

  Note well: backup memory before using any of the following!  LIBEVAL
  can clear memory if used incorrectly.  Warning to the clueless:
  LIBEVAL, NOT SYSEVAL!!!  If you don't know what a "bint" is, don't use
  the ones that mention bints.

  Example usage: "OUT OF RANGE Try Again" #B0091h LIBEVAL.  Try it!

       -----------------------------------------------------+----------
       Function                                             | LIBEVAL
       -----------------------------------------------------+----------
       Displays message box with grob                       | #B1000h
       CMD  last command window                             | #B2000h
       CHARS application                                    | #B2001h
       MODES application input form                         | #B41C1h
       flag browser  (returns t/f to level 1, just drop it) | #B41CFh
       MEMORY application  (aka variable browser)           | #B41D7h
       SOLVE application choose box                         | #B4000h
       solve equation input form                            | #B4001h
       solve difeq input form                               | #B4017h
       solve polynomial input form                          | #B402Ch
       solve linear systems of equations input form         | #B4033h
       solve TVM input form                                 | #B4038h
       PLOT input form                                      | #B4045h
       SYMBOLIC application choose box                      | #B4113h
       integrate input form                                 | #B4114h
       differentiate input form                             | #B4122h
       Taylor polynomial expansion input form               | #B412Bh
       Isolate a variable input form                        | #B412Dh
       solve quadratic input form                           | #B4130h
       manipulate expression input form                     | #B4131h
       TIME application choose box                          | #B4137h
       Set alarm input form                                 | #B4138h
       Set time and date input form                         | #B415Bh
       Alarm browser   (aka alarm catalog)                  | #B416Eh
       STAT application choose box                          | #B4175h
       single-var stat input form                           | #B4176h
       frequencies input form                               | #B417Dh
       fit data input form                                  | #B417Fh
       summary stat input form                              | #B418Fh
       I/O application choose box                           | #B4192h
       Send to HP48 input form                              | #B4193h
       Print input form                                     | #B4197h
       Transfer input form                                  | #B41A8h
       Get from HP48  (immediate)                           | #B50FFh
       recalls the contents of the reserve variable Mpar    | #E4012h
       -----------------------------------------------------+----------

       LIBEVAL : stack diagram / what it does
       -------   -----------------------------------------------------------
       #B0091h : $ --> makes a message box with an alert symbol in it
       #E0044h : $ --> displays a title line, top center (follow with
                 1 FREEZE if you want it to stay there after program ends)
       #B2000h : launches the Last Command choose-box
       #B2001h : launches the CHARS application; returns nothing if user does
                 not press ECHO
       #B2002h : launches the CHARS application; returns "" if user does not
                 press ECHO
       #B41CFh : launches Flag Browser; leaves a True or False on stack, so
                 follow this LIBEVAL with a DROP.
       #B50A3h : --> current time as hour, min, sec separately, plus an XLIB
                 that represents AM/PM/24-hr (just DROP it)
       #B50A4h : hh.mmss --> hh mm ss xlib (the xlib represents AM,PM, or
                 24-hr mode; just DROP it)
       #B50A6h : --> current date as month, day, year (always that order, and
                 a two-digit year)
       #B50A7h : mm.ddyyyy (or dd.mmyyyy) --> month, day, yr
       #B50A9h : #month #yr --> #days_in_that_month (inputs and output are
                 bints; year is two digits, interpreted as between 1991 &
                 2090 only)
       #B50AAh : #yr --> %0.00yyyy (input is two-digit bint interpreted as
                 between 1991 and 2090; output is a real number)
       #B50ABh : #mon #day #yr --> #day_of_week (inputs & output are bints;
                 year is two digits interpreted as between 1991 & 2090;
                 Sunday is #7; if you're in DMY mode, then the input order is
                 #day #mon #yr)
       #B50B2h : --> { 1 2 3 ... 59 } (not very fast)
       #B50B3h : --> { 1 2 3 ... 10 } (very fast)
       #B50B4h : --> { 0 1 2 ... 23 } (very fast)
       #B50B9h : --> { " 1 January" " 2 February" ... "12 December" }
       #B50D5h : --> number of alarms currently set (as a bint)
       #E3063h : hxs --> grob (this is an RLL packed-grob uncompressor, used
                 by EQ LIB and MINEHUNT; for example, try this:
                 #E202Bh LIBEVAL 3 GET #E3063h LIBEVAL PICT STO PICTURE)
       #E202Bh : the first of the packed EQ LIB grobs (see above)
       #E2069h : the last of the packed EQ LIB grobs (see above)
       #E7039h : MINEHUNT packed grob (left screen border)
       #E703Ah : MINEHUNT packed grob (right screen border)
       #E801Eh : obj --> obj T/F (tests whether object is in temporary memory
                 or not; returns System-RPL True or False)

  10.  Appendix C: Details of Bugs

  10.1.  The EquationWriter Bug

  From: Joe Horn

     Rev E Behaviour
        Clear flag -53 first (the Precedence Flag).

        On a Rev E, put '((1+2)/(3+4))^5' on the stack and press down-
        arrow.  You'll see:

                 5
          / 1+2 \
          | --- |                         (A)
          \ 3+4 /

     which is as it should be.  But now press orange-shift +; see the
     message "Implicit () off" momentarily; press left-arrow (not
     backspace), then press the EXIT softkey.  The expression gets man-
     gled into this:

              1+2
          -----------                       (B)
                (5)
           (3+4)

     which is not equal to expression (A) above!  Bug, yes?  Press ON to
     abort the process.

     Now set flag -53, then repeat the above procedure.  First you see:

                 5
          / 1+2 \
          | --- |                         (C)
          \ 3+4 /

     which is the same as (A) above; but continuing as before, you see:

                   (5)
          /  1+2  \
          | ----- |                       (D)
          \ (3+4) /

     which is equal to the original.  Thus the bug can be worked around
     by keeping flag -53 set (not a pleasant solution).

     Rev J Behaviour
        Major difference: after pressing down-arrow, Rev J goes directly
        into graphic mode, so you have to press ON and then EXIT to get
        into the equation editor (which Rev E goes directly into).  But
        that's petty cash compared to the following big change.

        The same sequence of operations, first with flag -53 clear, then
        set, exactly as detailed above, yields these four displays in a
        Rev J:

                   5
          / (1+2) \
          | ----- |                       (A')
          \  3+4  /

     (notice the extra parentheses?) and then:

              5
     / (1+2) \
     | ----- |                       (B')
     \ (3+4) /

     which is equal to (A'); nothing at all like expression (B) above!
     and then:

                   5
          / (1+2) \
          | ----- |                       (C')
          \  3+4  /

     which is the same as (A') above; and then:

                   5
          / (1+2) \
          | ----- |                       (D')
          \ (3+4) /

     which is also equal to (A').  No bug in Rev J.

  SUMMARY: Rev A-E have a bug in the EquationWriter that can mangle
  expressions if flag -53 is clear (the default) and if "Explicit Paren-
  theses" mode is toggled.  This bug has been fixed in Rev J.

  Unfortunately (as you can see above) Rev J always puts parentheses
  around polynomial numerators.  It is therefore impossible to use the
  ->GROB command on a Rev J to create a GROB that looks like expression
  (A) above; the simplest that can be had is expression (A').

  Another minor change, while I'm at it: Rev A-E don't change the menu
  when you press REPL; Rev J automatically flips to the appropriate
  RULES menu.

  10.2.  Rotation Rate to Angular Frequency Conversion Bug

     About the Bug:
        From: Wlodek Mier-Jedrzejowicz <wacm@doc.ic.ac.uk>

        There is a rotation rate conversion bug in the HP48 G/GX which I
        have not seen reported here before, so after discussion with the
        folks at Corvallis I am posting this description. Warning: it is
        159 lines long!

        First - an example. Put the unit object 60_rpm in level 2 and
        the unit object 1_r/s in level 1, then execute the command
        CONVERT.  You are asking the HP48 to convert a rotation rate of
        60 revolutions per minute into an angular frequency in radians
        per second. 60 rpm is 1 revolution per second, or 2pi radians
        per second.  No HP48 G/GX will give this answer!  Not everyone
        uses rpm or is even aware of the existence of this unit - it is
        one of the extra units in the UTILS menu of the Equation Library
        - so here is a second example - add 2pi radians per second to
        one Hertz.  Put 6.2832_r/s in level 1, 1_Hz in level 1, and add.
        You are adding an angular frequency of two pi (one cycle) per
        second to a rotation rate of one per second, so the result
        should be a frequency of two Hertz.  On an HP48 S/SX that is the
        answer.  On an HP48 G/GX it is not.

        When units are converted, by CONVERT, or during arithmetic on
        unit objects, the level 2 object is first turned into "base
        units", and then the result is converted into the units of the
        level 1 object.  On the HP48 S/SX, the "base unit" of angles is
        one rotation (or a "unit circle" or a revolution or a cycle).
        So, the angle unit of rpm (a revolution) or of Hz (a cycle if Hz
        is treated as a rotation rate) is already in base units -
        conversions to angles involving rpm and Hz automatically work
        correctly.  On the HP48 G/GX, the "base unit" of angles is the
        current angle mode (DEG, RAD or GRAD) - so any conversion from
        rpm or Hz (or any formula which works in cycles, rotations,
        revolutions, unit circles) to angles should be preceeded by a
        conversion from the unit circle to the current angle.
        Apparently no-one noticed this would be necessary, because it
        all worked automatically on the HP48 S/SX.

        So, when you convert 60_rpm to units of _r/s, an HP48 G/GX
        converts not 60 rotations but 60 "base angle units" per minute
        to radians/second. In RAD mode, you get 1 radian per second. In
        DEG mode you get 1 degree per second, and in GRAD mode you get 1
        grad per second (in each case expressed in radians). That's
        three different answers, none of which is correct! Exactly the
        same happens if you convert 1_Hz to angles per second, and the
        inverse mistake is made if you convert angles per time to cycles
        or rotations divided by time.

        I first learned of this bug from a member of HPCC (the British
        club for users of HP handhelds), Peter Embrey. He describes his
        troubles in articles in the first two 1994 issues of our club
        journal, DATAFILE (in Volume 13 number 1 pages 12 to 14 and
        V13n2p6). He was calculating the energy stored by a flywheel -
        given by the formula (1/2)*I*omega^2 and after a time he decided
        the answers had to be much too big when he CONVERTed from
        kg*m^2*(r/s)^2 to W*h on an HP48 GX.  It turns out that (r/s)
        are the correct units to get the right answer, but the GX was
        converting to degrees per second as it was in DEG mode, so his
        answer was too large by a factor of (360/2pi)^2 - a factor of
        about 3,300. In this case, his HP48 SX was not much better,
        since it converted from radians to unit circles. The way to get
        the correct answer is to use an HP48 G or GX in RAD mode - or to
        divide out the radians from the formula before using CONVERT.
        This is not yet a bug, but needs as much care as does use of
        temperature units on the HP48. But when Peter tried to deal with
        the problem by working in rpm, he came upon the bug described
        above. My thanks to Peter for putting me on the trail!

        Apparently this bug not been reported before - at least my
        friends in HP tell me that it was not on their list of known
        problems until I told them of it. (This means it is not fixed in
        the new revision R.) Why not - does everyone know about it and
        work around it without thinking to tell anyone else? Or does no-
        one use their HP48 to do calculations on rotating bodies - or do
        most people do calculations with rotating bodies in such a way
        that they do not encounter this problem? Could there be hundreds
        of students and engineers out there calculating and designing
        things on their HP48 G/GX and getting wildly inaccurate results?
        Has anyone built a disk drive or a jet engine which rotates far
        too fast and will disintegrate because of this? No, of course
        not, all engineers know that any design calculation absolutely
        must be repeated on two entirely separate calculators or
        computer programs! :-| Maybe some students have lost marks in
        exams because of this though - but please, this is not intended
        to restart the discussion as to whether calculators should be
        allowed in exams!

        I want to underline again that apparently no-one has reported
        this before - which must mean that few people have been affected
        by it. It is therefore not a good reason to throw away your HP48
        G/GX or get on a high horse and demand that HP replace your HP48
        G/GX - but I think it is important that people be warned so they
        can take appropriate avoiding action. The rest of this message
        goes into more detail - if you never worry about rotation
        calculations then you can safely ignore the rest - though you
        might find it interesting, so don't stop yet :-)

        One way to avoid this would be to add a new unit to the HP48 -
        call it what you like - the "cycle" or "rotation" or
        "revolution" or "unit circle". As I wrote above, this is already
        implied in the HP48 S/SX; to see this on an HP48 S/SX, put 360
        degrees in level 1 and execute UBASE - the result is 1, meaning
        that 360 degrees are equivalent to one base unit of angle
        measurement, but that there is no named HP48 unit corresponding
        to this. In contrast, UBASE on an HP48 G/GX considers the base
        unit of angle measurement to be the radian, even though CONVERT
        behaves as though the base unit is the current angle mode. There
        appear to be two different norms for base angle units on the
        HP48 G/GX!

        The whole subject gets very little mention in HP's manuals. In
        the original HP48 SX manual (two volumes, spiral bound), the
        section on "Dimensionless Units of Angle" in chapter 13, on page
        198, warns the reader about the danger of using dimensionless
        units and states how angle units and scalars are treated. In the
        later HP48 S and HP48 SX manual (one volume), the same warning
        is given in "Converting Dimensionless Units of Angle", on page
        13-12. The HP48 G Series User's Manual, in "Converting Angular
        Units" on page 10-7, says that conversion will interpret a
        scalar according to the current angle mode setting. (A scalar is
        a pure number with no units.)

        For a detailed description, look in the HP48 S/SX edition of
        "HP48 Insights Vol II", section 21.4.3. This book is written by
        Dr Bill Wickes, who was the design team leader of the HP48 SX,
        and who wrote the "Insights" books largely to provide the sort
        of explanations and details that get left out of manuals. A good
        explanation of angle units is exactly the sort of thing one can
        find there! He explains the pitfalls and unavoidable
        contradictions of working with angles in the HP48 units system
        and points out that the HP48 S/SX make the somewhat arbitrary
        choice of using 2pi as the base unit of angles, thereby making
        conversions between angles per time and Hertz work correctly.

        Maybe no-one on the HP48 G/GX team read this while they were
        making changes from the HP48 S/SX! Why did they change the base
        unit at all?  Most likely they were trying to deal with another
        contradiction: the units system lets you add pure numbers to
        angles, since both are dimensionless. If you add the number 1 in
        level 2 to the unit object 0_r in level 1 on an HP48 S/SX, the
        number 1 is treated as 1 base unit, or 2pi radians, and the
        result is 6.2832_r - but if you take the SIN of the number 1
        instead, it is not treated as 2pi, but as 1 unit of the current
        angle mode. The change made on the HP48 G/GX does resolve this
        contradiction, but at the cost of introducing the bug described
        above.

        As mentioned, a way to resolve the problems involved would be to
        add the angle unit "cycle" explicitly to the HP48 units system.
        Hz would then be treated as cycles per second when used in
        calculations involving rotations - rpm would be treated as
        cycles per minute, and conversions would go from cycles to the
        appropriate angle units. This suggestion was made by Peter
        Embrey in his articles, and the folks at HP accept that this is
        a good solution - but they have not implemented it yet. In the
        meantime, be very, very careful when converting between units of
        rotation rate and units of angular frequency. I would urge
        everyone who does not yet have a copy of Insights II to buy one
        and read the relevant section - maybe that will even entice Bill
        Wickes into publishing his long-awaited HP48 G/GX version of the
        book!

        I have not yet mentioned solid angles. In principle there should
        be no problem - on both the HP48 S/SX and the HP48 G/GX the base
        unit of solid angle is a "unit sphere", or 4pi steradians. On
        the HP48 S/SX you can add the pure number 1 to 0_sr and get
        12.5664_sr (4pi steradians). The HP48 G/GX manuals imply that
        exactly the same should happen, but on my (version L) HP48 GX
        this gives the error message "Inconsistent Units".  This is yet
        another undocumented difference between the Series S and Series
        G but at least it is no bug!

        Apologies for making this description so long, I hope most
        people will agree that a subject like this deserves a careful
        description! For my next trick - some details on the HP48 Random
        Number Generator.

     Addition Insight:
        From: Eric Haas <EHaas@ix.netcom.com>

        Note: The < symbol below is actually the angle character.

        The angular conversion bug is actually in the definition of the
        rpm unit.  If you put 1_rpm on the stack, and type UBASE, you
        get 1.66666666667E-2_1/s.  Notice that there is no angular unit
        in the definition. If the rpm unit is instead defined as 6_</s,
        all conversions to and from rpms will work just fine. As an easy
        work-around, define the unit RPM as 6_</s and use that instead
        of the built-in unit.

        If desired, one could also define the unit HZ as 60_rpm or
        360_</s.  However, as Hz is sometimes used to describe things
        other than rotation rates, such a definition would not be
        appropriate for all circumstances.

  11.  Appendix D: Hardware Additions

  11.1.  How to Make a Serial Cable

  From: Frank Vorstenbosch <prompt@xs4all.nl>

  HOW TO MAKE A SERIAL CABLE FOR YOUR HP48

     THE CONNECTOR FOR YOUR HP48
        The connector used in your HP48 is a 4 pin (i.e. male)
        connector, with pins spaced 2 mm (NOT 0.1") apart.  These
        connectors are not readily available in stores so you'll have to
        improvise.  If you happen to have a broken floppy drive or
        harddisk lying around, look inside and see if you can find a
        connector there that will fit the HP48.  Do not use a 0.1"
        connector, as this will damage the pins in your calculator.
        If you can't find a usable connector, then you'll have to make
        one yourself.  For this you need four pins taken from a wire-
        wrap IC socket (available from Radio Shack or some other shop
        catering for DIY electronics).  The smallest IC socket available
        usually has 8 pins; so don't worry if you damage a pin while
        removing it from the hard plastic socket.  The pins of the wire-
        wrap socket are about 1" long, thereby making soldering them
        easier than standard sockets.

        Next, solder a 'fork' from thin rigid metal wires, to hold the
        four IC pins spaced at exactly 2 mm while you glue them together
        with superglue.  Glue a plastic 'handle' to the four IC pins to
        be able to remove the connector from the HP48.  You can also
        indicate the top side of the connector on this handle.

        Note that the hole in the HP48 in which the connector should go
        is not symmetrical; the pins are nearer to the top of the
        calculator than the bottom, and you can use this to make it
        difficult to insert the connector the wrong way up.

          Connector to plug
          in your HP48 (F)    HP48 connector (M)
               ______               ______
               |oooo|               |....|
               \____/               \____/
           pin 4   pin 1        pin 1    pin 4

     MAKING THE CONNECTIONS
        You can use either a 9 or a 25 pin female sub-D socket for the
        PC-side of the cable.

             9-pin RS232                 25-pin RS232
            connector (F)                connector (F)

          pin 5       pin 1    pin 13                     pin 1
            -------------         ---------------------------
            | o o o o o |         | o o o o o o o o o o o o |
             \ o o o o /           \ o o o o o o o o o o o /
              ---------             -----------------------
           pin 9     pin 6      pin 25                   pin 14

     Use flexible 4-wire cable to connect the four contacts of your HP48
     connector to the PC connector.  Pin 1 of the HP48 should be con-
     nected to the metal shield of the RS232 connector.  Usually it is
     not easy to solder this shield; first scratching the shield bare
     (it has some kind of coating) using a screwdriver or a file will
     help.  If this doesn't work, simply leave pin 1 of the HP48 discon-
     nected.  Note that pins 2 and 3 of the RS232 connector must be
     swapped when you use a 25-pin connector.

     HP to PC cable

     HP48 | RS232-9 | RS232-25
     -----+---------+----------
       1  | shield  |  shield
       2  |    2    |    3
       3  |    3    |    2
       4  |    5    |    7

     Before connecting the completed cable to your HP48, check for
     short-circuits using an ohmmeter or multimeter set to ohms or
     "diode test".

     HP TO HP CABLE
        If you want to use 9600 bps communication between two HP48s,
        then make two HP48 connectors and simply connect the two,
        swapping pins two and three.

          HP to HP cable

          HP#1 | HP#2
          -----+-----
            1  |  1
            2  |  3
            3  |  2
            4  |  4

     WARRANTY, DISCLAIMER ETC.
        Although the serial interface of the HP48 is protected
        internally, it is possible to damage the calculator when a wrong
        connection is made.  I am not responsible for any errors in this
        file, or for any mistakes you may make.

  From: Deborah Lynn Williams

  I made an HP48 link out of four pieces of speaker wire and serial port
  plug.  The wiring of the plug is available above.  The connection to
  the HP plug is the difficult part.

  I took 4 pieces of stranded speaker wire and cut them so that the wire
  and the insulation were even.  I then took a paper clip and pushed it
  into the this open end, making a space between the wire and the
  insulation.  I then had to trim some of the strands that were sticking
  out.  I then just pushed this onto the pins in the HP48 port.  It
  isn't a very strong connection, but it works fine if you don't jostle
  it.

  The other ends of these speaker wires I connected to the serial plug.
  Just remember to label which wires go to which pin, or make them all
  different lengths.

  From: Jeff Dubin

  The HP48 side of the serial port connector can be made with a CD-ROM
  to sound card audio connector.  Take a 4-pin CD-ROM audio connector (I
  used a Mitsumi cable), cut it up and stick a 9 or 25-pin PC serial
  connector on the other end (see pin wiring above).  You may want to
  add a piece of cardboard to the connector for easy removal.

  11.2.  Using Non-HP RAM Cards

  If you use RAM cards that are NOT designed for the HP48, it is
  possible to severely damage your HP48.  If you want to be safe, you
  should only use RAM cards designed for the HP48.

  Here is an edited discussion from comp.sys.handhelds.

  From steveh@hpcvra.cv.hp.com Fri Mar  1 17:00:00 1991
  From: steveh@hpcvra.cv.hp.com (Steve Harper)
  Date: Thu, 10 May 1990 22:46:09 GMT
  Subject: RE: HP48 SX Memory Card Pricing
  Organization: Hewlett-Packard Co., Corvallis, OR, USA

  There has been a substantial amount of comment regarding the memory
  cards for the HP48 SX and their prices.  My purpose in this response
  is not to attempt to justify any particular price, but rather to
  present the technical reasons why there is a substantial price
  difference between the memory cards and other types of expansion
  memory for PC's, for example, with which users are probably more
  familiar.

  Some users have correctly pointed out that the memory in the cards is
  static RAM rather than dynamic RAM commonly used in PC's.  Dynamic RAM
  uses one transistor and a capacitor for each bit of memory whereas
  static RAM requires either four transistors and two resistors, or six
  transistors.  The net result is that an equivalent amount of static
  RAM is much larger and therefore much more expensive than dynamic RAM.
  The advantage is that static RAM doesn't need to continually be
  running and drawing current (refresh cycles) to retain the contents of
  memory.

  In addition, the static memory used in the cards is not just any
  static memory, but is specially processed and/or selected for very low
  standby current.  This allows the backup battery in the card to keep
  memory alive for a very long time, rather than requiring the user to
  replace it every few months.  The special processing and/or special
  testing to select low current parts adds to the already higher cost of
  the static RAM chips.

  The standard molded plastic DIP package used for most integrated
  circuits, including memory chips, is relatively inexpensive because of
  its simplicity and the huge volumes.  Unfortunately, these packages
  are too large to put into a memory card.  Therefore, the card
  manufacturer mounts the individual silicon memory chips directly on a
  special thin PC board together with the memory support chips.  Because
  multiple chips are being placed in a single hybrid package in a
  special process which has lower volume, yields are lower and this
  again causes the cost to be higher.  Indeed, the yield becomes
  exponentially worse as the number of chips and interconnections
  increases in such a packaging process.

  In addition to the memory chips themselves, two more integrated
  circuits and several discrete components are required for power and
  logic control.  A bipolar technology chip senses the external voltage
  and switches the power to the chips from the internal keep-alive
  battery as needed.  A CMOS gate array chip protects the memory address
  and data lines from glitches/ESD when the card is not plugged in.
  This chip also generates the proper enabling signals when there are
  multiple memory chips in the card, as is presently the case with the
  128 Kbyte RAM card.  These chips must be designed for extremely low
  current, just as the memory chips are.

  In addition to the battery and the battery holder, the other
  mechanical parts are important, too.  The molded plastic frame holds
  the PC board and provides the foundation for the metal overlays and
  the shutter-and-springs assembly which protects the contacts from ESD
  and from contaminants.  The write-protect switch is also an important
  feature.  It is quite expensive for the manufacturer to make the tools
  necessary to fabricate each of these parts as well as the tools to
  assemble and test the complete card.  While the volume of memory cards
  is relatively low this tooling cost represents a significant part of
  the cost of each card.

  Admittedly, there are other alternatives, such as those presently used
  in PC's, to provide a memory expansion capability.  To provide that
  kind of expansion would require the calculator to be much larger than
  it is and possibly more expensive.  This is clearly very undesirable.

  Other features that were felt to be essential were the ability to
  distribute software applications and to share and archive/backup user-
  created programs and data.  Other expansion alternatives  do not
  provide these important benefits.  The I/O capabilities of the
  calculator provide these features only to a limited degree.

  One other item bears repeating here: Memory cards for use in the
  calculator will clearly indicate that they are for use with the HP48
  SX.  Other memory cards exist which are mechanically compatible with
  the HP48 S, but these cards cannot be relied upon to work electrically
  in the calculator.  The HP48 SX cards are designed for a lower supply
  voltage range.  Use of the other cards may cause memory loss, and
  under certain circumstances may even damage your calculator
  electrically.

  From steveh@hpcvra.cv.hp.com Fri Mar  1 17:00:00 1991
  From: steveh@hpcvra.cv.hp.com (Steve Harper)
  Date: Fri, 11 May 1990 16:52:07 GMT
  Subject: Re: Memory Card: Give Us True Facts!
  Organization: Hewlett-Packard Co., Corvallis, OR, USA

  My previous statement that under certain circumstances the calculator
  may even be damaged electrically is not a ploy.  If the calculator's
  internal power supply voltage happens to be near the low end of the
  range, say 4.1 V, and the voltage at which the card's voltage control
  chip shuts it down happens to be near the high end of its range, say
  4.2 V (this can and does occasionally occur for the non-HP48 SX
  cards), then the calculator will start to drive the memory address
  lines and the card will still have these clamped to ground (that's
  what it does to protect itself when there is not sufficient system
  voltage to run).  This unfortunate situation may simply trash your
  memory, or if the calculator tries to drive enough of the lines high
  at the same time, several hundred milliamps may flow...for awhile that
  is, until something gives up...  On the other hand, your calculator
  and a particular non-HP48 SX card may work just fine if those voltages
  happen to be at the other end of their ranges.  These voltages are
  also slightly temperature sensitive.  It may work in the classroom or
  office and not at the beach, or vice versa.  The voltage trip point of
  the HP48 SX cards has been set lower (a different voltage control
  chip) so that this cannot occur, regardless of part and temperature
  variations.

  One other item was brought to my attention yesterday by Preston Brown
  that I should have included in my original posting here.  While most
  of us recognize that comparing RAM cards to a handful of dynamic RAM
  chips to plug into your PC is apples and oranges, it may be more
  interesting to compare the HP48 SX cards with cards for other
  products, like the Atari Portfolio, the Poquet, the NEC Ultralite,
  etc.  I believe you will find that the prices on the HP48 SX cards are
  not at all out of line.

  Steve "I claim all disclaimers..."

  From prestonb@hpcvra.cv.hp.com Fri Mar  1 17:00:00 1991
  From: prestonb@hpcvra.cv.hp.com (Preston Brown)
  Date: Thu, 17 May 1990 17:26:53 GMT
  Subject: Re: Memory Card: Give Us True Facts!
  Organization: Hewlett-Packard Co., Corvallis, OR, USA

  When the RAM cards detect that voltage is to low to operate they clamp
  the address lines to ground.  This clamping is done by turning on the
  output drivers of a custom chip included on the card.  The clamping
  current is specified to be 2mA min at the Vol output level.  Since the
  48 can be trying to drive the line all the way high even more current
  is typical.  10mA per fight is not uncommon with totals of several
  hundred mAs.

  The VDD power supply is regulated at 4.1 - 4.9 with typical parts at
  the low end (4.3).  The power to the cards is switched through a
  transistor, creating up to a 0.1V drop.  Standard Epson cards have a
  significant chance of seeing this voltage as to low and shutting down.
  We have seen cards do this in the lab.  When it occurs the calculator
  locks up with VDD pulled down to about 2.5V and 250mA being drawn from
  the batteries.  This current drain greatly exceeds the ratings for the
  power supply and can damage your calc.  The least that will happen is
  a loss of memory.

  Now, why didn't we regulate VDD higher?  The 48 has two power supplies
  VDD at 4.3 and VH at 8.5.  VH cannot be regulated higher without
  exceeding the spec for our CMOS IC process.  VH is used as the +
  voltage for the I/O.  In order to meet a +3V output level VH must be
  more then 3.6V above VDD.  (VDD is used as I/O ground).  Our power
  supply system increase the battery life and reduces the cost greatly
  for the wired I/O.

  Preston

  12.  Appendix E: Where to get HP48 Programs

  12.1.  Best Programs and Where to Get Them List

  This list is designed to help HP48 users locate useful, well written
  programs for their HP48, selected by HP48 users who send in
  recommendations for their favourite programs.

  Compatibility is noted by either SX (SX only), GX (GX only), SX/GX (SX
  and GX), or SX?/GX (Works on GX, not sure about SX).

  Most of the sites below require InterNET access.  However CompuServe
  has a modest HP48 archive in the HP handhelds forum.  Type "go HPHAND"
  to access the forum.  HP48 specific files can be found in DL 3.
  America Online also has an HP area you can access using "Keyword PDA".

  Note that for most FTP sites, any programs in uploads directories are
  subject to movement into their appropriate directories (i.e. games or
  utilities), or removal by the archive maintainer.  There is also the
  possibility that the program might have a slightly different name than
  the one given below, especially if newer versions are available.  If
  information has changed that you know of, let me know so I can update
  the list.

  One site in particular, ftp.cis.com, is intended for G/GX programs
  only.  However the programs in the uploads directory of ftp.cis.com
  are not necessarily GX compatible.  As such, please do not upload non-
  GX compatible programs to ftp.cis.com.  Thanks!

  I have also released my personal HP48 archive, which should be current
  as of July 1996.  It should contain all of the following programs, as
  well as lots of others.  More information can be obtained at my home
  page, <http://www.engr.uvic.ca/~aschoorl/> or at
  <ftp://ftp.cis.com/pub/hp48g/uploads/as-info.doc>

     Applications

     o  StringWriter (SX/GX): This is a replacement editor by Jean-Yves
        Avenard.  It offers such features as cut, copy, paste as well as
        a choice of fonts.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/strwrt44.zip>

     o  EXAL (SX/GX): Great spreadsheet program by Al Arduengo.
        Available at <ftp://ftp.cis.com/pub/hp48g/uploads/exalv46.zip>

     o  GxTools (GX): GxTools is in effect a "Toolbar" for your G/GX
        consisting of many useful utilities.  Put together by Jack Levy
        and available at <http://www-
        personal.engin.umich.edu/~levyj/hp48.html>

     o  Organizer (SX/GX): Organizer is a library designed to act as a
        Personal Information Manager, or PIM.  The goal is to create a
        high-speed, easy to use, compact, yet fully functional PIM for
        the HP48.  Organizer includes a calendar, appointment scheduler,
        annual events, TODOs, and a phone manager.  Also by Jack Levy
        and at <http://www-personal.engin.umich.edu/~levyj/hp48.html>

     o  Remote-BG (SX/GX): Use your HP48 as a remote control!  This is
        the best of the remote control programs and has the ability to
        learn new codes.  By Bjorn Gahm, available at
        <ftp://nada.kth.se/home/d89-bga/hp/files/posted/rem34bg.zip>

     o  Scribe (SX/GX):  Scribe is a library which will function as a
        Database or Rolodex.  It is designed to hold a large amount of
        information in such a manner that it is easy to retrieve, quick
        to find, and transparent in usage.  Another great program from
        Jack Levy at <http://www-
        personal.engin.umich.edu/~levyj/hp48.html>

     Documents

     o  FAQ (SX/GX): Contains valuable answers to Frequency Asked
        Questions.  Read it!  The latest version is available at
        <http://www.engr.uvic.ca/~aschoorl/faq/>.

     o  RPLMAN.DOC (SX/GX): This document was written by HP and released
        without support to HP48 users.  It describes how to program in
        System RPL.  Available on Goodies Disk 4.

     o  SASM.DOC (SX/GX): Also from HP, this is the unsupported guide to
        machine language programming for the Saturn processor.
        Available on Goodies Disk 4.

     o  GX Programming Tips (SX/GX): This document by Doug Cannon
        briefly describes how to write code that runs on both SX and GX.
        Available at
        <ftp://ftp.cis.com/pub/hp48g/programming/gxtips.zip>

     o  ML Input (SX/GX): How to get keyboard input from ML.  By Joe
        Ervin.  Available on Goodies Disk 7.

     o  Library Info (SX/GX): Information on the structure and use of
        libraries.  By Charlie Patton.  Available on Goodies Disk 8.

     Games

     o  Arkanoid (SX/GX): Breakout clone with editor - by "HP Mad".  SX
        version available on Goodies Disk 8.  There is also a GX version
        floating around, try <ftp://ftp.cis.com/pub/hp48g/uploads/as-
        games.zip>

     o  Boulder DasHP (SX): Classic game of Boulder Dash by David Presle
        "ORUS".  Get the diamonds without getting smashed by falling
        rocks or running into enemies.  Available on Goodies Disk 8.

     o  Columns (SX/GX): Tetris-like game by Spartacus.  Available at
        <ftp://ftp.cis.com/pub/hp48g/games/columns.zip>

     o  Columns II (GX): Columns with grey scale for GX only, again by
        Spartacus.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/columns2.zip>

     o  Diamonds (SX/GX): Great game by Doug Cannon!  Control bouncing
        ball to get the diamonds.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/diam20.zip>

     o  ICE Cube (SX/GX): Great action arcade game in four levels of
        grey scale by Lilian Pigallio.  Available at ftp.cis.com.

     o  Jytris (SX/GX): One of the best tetris games including music,
        cartoons, bombs, and grey scale intro.  Written by Laurent
        Jouanneau.  Separate libraries are available for all HP48s
        (including minimized libraries for S and G).  All of which are
        available at ftp.cis.com.  In particular, the GX version is at
        <ftp://ftp.cis.com/pub/hp48g/uploads/jytrisgx.lib>

     o  Hapaman (GX): PacMan clone by Davor Jadrijevic.  Available at
        <ftp://ftp.cis.com/pub/hp48g/games/hapaman.zip>

     o  La Mine aux Diamants (SX/GX): Another Boulder Dash clone.  By
        Lilian Pigallio.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/diamants.uue>

     o  Lemmings (SX/GX): Save the lemmings from killing themselves!  By
        C. de Dinechin.  GX version is available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/lemprog.gx> and SX version
        is at <ftp://ftp.stud.fh-
        heilbronn.de/pub/hp48/game/arcade/lemmings/lemmingsx.zip>

     o  LodRunner (GX): LodeRunner clone for the HP!  By HPOWER, with
        improvements from Mika Heiskanen.  Available at ftp.cis.com.

     o  Phoenix (SX/GX): Phoenix clone by Davor Jadrijevic.  GX version
        is available at <ftp://ftp.cis.com/pub/hp48g/games/phoenixg.zip>
        and SX version is at <ftp://ftp.stud.fh-
        heilbronn.de/pub/hp48/game/misc/phoenixs.zip>

     o  Quick Reversi (SX): Fastest Reversi by Leon Pavlov.  Quite
        smart!  Available on Goodies Disk 8.

     o  Tetris (SX/GX): Tetris clone - small, fast, great!  By Detlef
        Mueller.  Available at wuarchive.wustl.edu.

     o  SCHIP (SX/GX): Video game interpreter for SCHIP designed games.
        By Erik Bryntse.  SX version available on Goodies Disk 3.  GX
        version available at
        <ftp://ftp.cis.com/pub/hp48g/games/schipgx.zip>

     o  Vaders (SX/GX): Space Invaders by Joe Ervin.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/vaders21.zip>

     o  Willy (SX/GX): Side scroller game by Mario Mikocevic.  Available
        at <ftp://ftp.cis.com/pub/hp48g/games/willy.zip>

     Math

     o  ALG48 (SX/GX): Very fast algebraic manipulation utilities by
        Mika Heiskanen and Claude-Nicolas Fiechter.  Available at
        <http://www.hut.fi/~mheiskan/>

     o  ALGB (SX/GX): Tons of powerful math utilities!  By Bernard
        Parisse.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/algb223.zip>

     o  CNTR (SX/GX): Discrete and continuous control systems design;
        Inverse Z and Laplace Transforms.  By Cesar Crusius.  Available
        at <ftp://ftp.cis.com/pub/hp48g/uploads/cntr300.zip>

     o  EQSTK (SX/GX): 7-line replacement stack intended for
        mathematics.  View objects on the stack in their native form
        (see also Java, a more generalized stack program).  By Mika
        Heiskanen.  Available at <http://www.hut.fi/~mheiskan/>

     o  Math (SX/GX): Symbolic/numerical matrices and polynomials by
        Cesar Crusius.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/math210.zip>

     o  MTools (SX/GX): MathTools by Jack Levy.  Faster and friendly
        replacements for the HP's math functions.  Available
        <http://www-personal.engin.umich.edu/~levyj/hp48.html>

     o  QPI (SX/GX): Replaces ->Q, shows quotients, and functions of pi,
        radicals, LN and EXP.  Very useful!  THe latest version can be
        found at <http://www.hut.fi/~mheiskan/>.

     o  SolveSys (GX): Solves systems of equations.  By Sune Bredahl.
        Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/solvesys3a.zip>

     Programming

     o  Jazz (SX/GX): This is best System RPL and Machine Language
        development library that runs right on your HP48!  Written by
        Mika Heiskanen.  The Jazz library provides commands for
        assembling, disassembling and debugging both System RPL and
        machine language.  Latest full version is available at
        <http://www.hut.fi/~mheiskan/> and corresponding light version
        at <http://www.engr.uvic.ca/~aschoorl/>

     o  HP's Tools (DOS): Development tools for System RPL and libraries
        on the PC.  On Goodies Disk 4.

     o  GNU-Tools (Unix, DOS): A set of replacements for HP's
        development tools by Mario Mikocevic (Mozgy) which that not only
        runs on DOS, but also typical Unix systems such as Linux and
        Solaris.  It is distributed in both source and binary form.

        Many of the larger HP48 programs like Jazz and Java were
        developed with GNU-Tools.
        It is available at:

     o  <ftp://gnjilux.cc.fer.hr/pub/hp48/gtools/>

     o  <http://www.zems.fer.hr/~mozgy/jwz/hp48.html>

     o  SSS (SX/GX): The SysRPL Shell by Stefan Wolfrum provides an
        interface that helps you program in System RPL.  Available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/sss22.zip>

     Graphics

     o  4 Colors (SX/GX): Utilities for making four shade greyscale
        graphics.  By Lilian Pigallio and available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/4colors.zip>

     o  Claudia (SX/GX): Greyscale demo of Claudia Schiffer, the
        supermodel.  By Mohamed Fatri.  Available at
        <ftp://ftp.cis.com/pub/hp48g/graphics/claudia.zip>

     Utilities

     o  BKUP (SX/GX): BKUP is written entirely in System RPL and is
        intended to make a backup of any port(s) the user specifies.  By
        Bob Apodaca, available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/bkup46.zip>

     o  FF (GX): This File Finder is designed for users with large
        directory structures.  It accepts a string and will search your
        directories recursively for matches.  By Jorge Costa and
        available at <http://alfa.ist.utl.pt/~l38861/>

     o  FIXIT (SX/GX): This program by Mika Heiskanen and Joe Horn
        repairs "HPHP48-" bad downloads.  Available in ASC format in the
        FAQ as well as on Goodies Disk 8.

     o  FXRECV (GX): Fixes bug in X-Modem for G/GX.  Not necessary for
        Rom R.  By Cary McCallister.  Available on Goodies Disk 9.

     o  Java (SX/GX): The totally improved 5-line stack environment!
        Includes lowercase menus, improved status area, on-stack
        algebraics, improved interactive stack, configurable font,
        scroller, fast ML routines and more.  By Richard Steventon and
        Andre Schoorl (hey that's me!).  The latest released version
        (2.9) is available at <http://www.engr.uvic.ca/~aschoorl/>

     o  PCT (SX/GX): Both SX and GX versions are available of this file
        and library maintenance program.  Available at the standard
        sites.  Be sure to use the correct version for your machine!  In
        particular the TREE.PCT file is an S/SX program that is a common
        cause of crashes on G/GX machines.

     o  UFL (SX/GX): The Universal Font Library provides a centralized
        location for common fonts between programs.  Also comes with a
        Font Maintenance Library (FMnt).  Maintained by Andre Schoorl
        and available at <http://www.engr.uvic.ca/~aschoorl/ufl/>

     o  USEND/URECV (SX/GX): Significantly faster IR file transfers!
        Approximately 4 to 6 times faster than SEND.  By Dan Kirkland.
        Available at <ftp://ftp.cis.com/pub/hp48g/utilities/usnd3.dk>

     o  STOFIX (GX): Fixes STO bug on Roms L and M.  By Detlef Mueller.
        Available at <ftp://ftp.cis.com/pub/hp48g/utilities/stofix.zip>

     Sound

     o  Tricorder (SX/GX): This program will make your HP48 beep when it
        is held close to an object using the IR port.  Great for amusing
        friends!  Written by Steven Ourada, and available at
        <ftp://ftp.cis.com/pub/hp48g/uploads/tricorde.zip>

  12.2.  Other FTP Sites

  o  <ftp://ftp.cis.com/pub/hp48g/>

  o  <ftp://hpcvbbs.external.hp.com/dist/>

  o  <ftp://oprfhs.org/pub/hp48/>

  o  <ftp://ftp.stud.fh-heilbronn.de/>

  o  <ftp://ftp.cyberbox.north.de/pub/pockcomp/hp48/>

  o  <ftp://ftp.cyberbox.north.de/pub/pockcomp/fileecho/hp48/>

  o  <ftp://hplyot.obspm.fr/hp48/>

  o  <ftp://wuarchive.wustl.edu/systems/hp/hp48/>

  o  <ftp://ftp.ee.ualberta.ca/pub/HP48/>

  o  <ftp://oak.oakland.edu/pub/ham/hp48/>

  o  <ftp://ftp.polymer.uakron.edu/pub/hp48g/>

  o  <ftp://nic.funet.fi/pub/misc/hp48g/>

  o  <ftp://nada.kth.se/home/d89-bga/hp/>

  o  <ftp://ftp.fht-mannheim.de/pub/hp48/>

  12.3.  FTP by Electronic Mail

  For those of you who don't have FTP access, you can FTP programs by
  mail.  To do this, you send commands via email message to the ftpmail
  server, and it then sends back the programs, usually in a uuencoded
  format by email.

  For access to any ftp site, I recommend the sunsite ftpmail server.
  To get more information, send a mail message to
  <ftpmail@sunsite.unc.edu> with the contents of:

       help
       quit

  There are other FTP by mail servers like the sunsite server, but they
  are more heavily used, and take longer.

  12.4.  Bulletin Boards with HP48 Programs

     Official Hewlett Packard BBS (48)

     o  Phone: (541) 715-4448 ; Corvallis, Oregon.

     o  Second Node: (541) 715-3277 ; Speed: 9600 baud

     Foundations in Science (48/100)

     o  Phone: (206) 562-7083 644-2723 ; Speed: 14.4

     o  Contact: <civan@eskimo.com>

     UAH ACCESS BBS (28/48/95/100)
        Phone: (205) 895-6152 ; U. Alabama Huntsville.

     The Ninth Bit BBS (48)

     o  Phone: (405) 372-7204 ; Speed: 14.4

     o  Contact: <scott.wilkins@ninth.ucc.okstate.edu>

     Raiders of Lost Arg (48/95)

     o  Phone: (416) 968-6633 ; Speed: 38400 N81

     o  Contact: <john.ricciuti@can.rem.com>

     NES BBX (48)
        Phone: (503) 640-4263 ; Goodies Disks in File Area 22

     (hp)al BBS (48/95/100)

     o  Phone: (612) 642-5906 ; Features: Usenet, E-Mail

     o  Contact: <rab@lydia.mn.org>

     Electronic Design News BBS (48)
        Phone: (617) 558-4582 ; Features: Open to All

     Nybble's Byte (28/48/95/100/etc)

     o  Phone: (708) 304-0666 ; Speed: 28.8

     o  Features: 24 hr. Usenet/Internet

     Terrapin Station (48)
        Phone: (708) 657-9543

     48 Files BBS (48)

     o  Phone: (801) 371-8760 ; Speed: 14.4

     o  Features: Over 3000 files

     The ONE BBS (48)
        Phone: +33-149-887-691 ; France.

     Cyberbox (48)

     o  This German BBS has a filebase that contains about 1000 Files,
        30MB.  All are zipped, with descriptions.

     o  Contact: Patrick_Werner@cyberbox.north.de

     o  Phone:

     o  Line 01    : +49-441-3990031  USR 2400-33600

     o  Line 02-04 : +49-441-3990032  USR 2400-14400

     o  Line 05-08 : +49-441-3990033  USR 2400-33600

     o  There is also full access to the filebase at
        <http://www.cyberbox.north.de/> with a description to all the
        files (you can find the descriptions in POCFILES.ZIP in
        pub/pockcomp/hp48).

  12.5.  HP Goodies Disks

  The HP Goodies Disks are a set of disks that are chock full of great
  HP48 files.  They are collected by Joe Horn, and sold at cost through
  EduCalc.  They contain all shareware/freeware files.  Currently there
  are 10 disks.  They can be obtained via anonymous ftp from the places
  listed below, or they can be purchased from EduCalc. In the listings
  above, they are referred to by "GD #".  All the goodies disks have a
  file "fileinfo.src" which contains an index of all the files.  I would
  recommend everybody looking through all these disks, as there is lots
  of great stuff on them!

  o  EduCalc: 1-800-677-7001

  o  <ftp://wuarchive.wustl.edu/systems/hp/hp48/EduCalc/>

  o  <ftp://ftp.ee.ualberta.ca/pub/HP48/>

  o  UAH BBS: (205) 895-6152

  o  CompuServe: go HPHAND ; DL 3

  13.  Contributors

  The maintainer thanks the following international contributors
  (covering a total of 13 countries) for their invaluable help in
  compiling this FAQ:

     U.S. and Canada:
        Dave Arnett, Allen Arnold, Rich Brown, Doug Cannon, Dallan
        Christensen, James Cook, Andrew Dooley, Chuck Dinsmore, Jeff
        Dubin, Egan Ford, Paul Hart, Joe Horn, Jack Levy, Keith Maddock,
        Scott Marlowe, Thomas De Matteis, John Meyers, David Moisan,
        Derrik Pates, David Peterson, Othniel Rawlins, David Rice, Ray
        Richardson, Maynard Riley, Jeremy Smith, Chris Spell, Deborah
        Lynn Williams, Mark Wilson.

        Jean-Francois Larin, Matt Willis, Jeff Sketchley, Ryan Youck.

     Europe:
        Rachid Benzaoui (France), Jorge Costa (Portugal), Yves Gadioux
        (France), Bjorn Gahm (Sweden), Maarten van den Hoek
        (Netherlands), Pieter-Bas IJdens (Netherlands), Jens Kerle
        (Germany), Wlodek A C Mier-Jedrzejowicz (U.K.), Mario Mikocevic
        "Mozgy" (Croatia), Makoto Miyamoto (Germany), Jarno Peschier
        (Netherlands), Lilian Pigallio (France), Rob Simpson (U.K.),
        Klaus Wolferts (Germany), Stefan Wolfrum (Germany), Stevens
        Wouter (Belguim), Matjaz Vencelj (Slovenia).

     Elsewhere:
        Cesar Crusius (Brazil), Kevin Cheng (Australia), Richard
        Steventon (South Africa).


-----BEGIN PGP SIGNATURE-----
Version: 2.6.3ia
Charset: noconv

iQEVAwUBMjMX0omoL2E80bZ1AQFZnQgAnljsBJD/Hcuj406O3TgtXZ878vxlQZRg
H8Y11HPzI8bEhorjgijtPSzzJpgS13DhKtgC8RCq7QTYyHWbA1HAWkKu2nwGbBGN
6UpFlRNvtSLflsVXRKig04YTl2dtew7uPyI+kTacuey+jKj5qCYlGxVesgQv0S4g
ih4x83s1Y/PZFar+zmicKvH0XtbBeYYeBH6Lz+nO81UrGd8MdcAllh2ilgxkjJnI
7JCw2ooS3iuIEFJqlxJ6woPTbqPd26gwj+NbD+ZIg8JB2jYbisA6E2F4n+mtu6pA
miNrQKkFKmi56iMRtbNpMySNdFUIaG/5Dc56aYBLR1wxThOs9KI0lg==
=2OuL
-----END PGP SIGNATURE-----
